Socket IO Web实时推送
1服务器pom.xml引入
<!-- 服务端 -->
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.7</version>
</dependency>
<!-- 客户端 -->
<dependency>
<groupId>io.socket</groupId>
<artifactId>socket.io-client</artifactId>
<version>1.0.0</version>
</dependency>
2:编写服务端程序 ServerDemo.java
package com.gwzx.gwzxyw.socket.test; import org.apache.log4j.Logger; import com.corundumstudio.socketio.AuthorizationListener;
import com.corundumstudio.socketio.Configuration;
import com.corundumstudio.socketio.HandshakeData;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.ConnectListener;
import com.corundumstudio.socketio.listener.DisconnectListener;
import com.gwzx.gwzxyw.socket.SocketManager; public class ServerDemo {
private static Logger logger = Logger.getLogger(ServerDemo.class); public static void main(String[] args) {
try {
Configuration config = new Configuration();
config.setHostname("localhost");
config.setPort(9093); //此处做token认证
config.setAuthorizationListener(new AuthorizationListener() {
@Override
public boolean isAuthorized(HandshakeData data) {
System.out.println(data);
return true;
}
}); SocketIOServer server = new SocketIOServer(config); CharteventListener listner = new CharteventListener();
listner.setServer(server);
// chatevent为事件名称
server.addEventListener("chatevent", ChatObject.class, listner); // 连接监听器
server.addConnectListener(new ConnectListener() {
@Override
public void onConnect(SocketIOClient client) {
SocketManager.clietMap.put(client.getSessionId(), client);
logger.info("连接:SessionId=" + client.getSessionId() + ", 总数con:" + SocketManager.clietMap.size());
}
}); // 断开监听器
server.addDisconnectListener(new DisconnectListener() {
@Override
public void onDisconnect(SocketIOClient client) {
// TODO Auto-generated method stub
SocketManager.clietMap.remove(client.getSessionId());
logger.info("断开:SessionId=" + client.getSessionId() + ", 总数dis:" + SocketManager.clietMap.size());
}
}); // 启动服务
server.start();
Thread.sleep(Integer.MAX_VALUE);
server.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
}
消息实体类 ChatObject.java
package com.gwzx.gwzxyw.socket.test;
import java.io.Serializable;
public class ChatObject implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8027556976083577023L;
private String userName;
private String message;
public ChatObject() {
}
public ChatObject(String userName, String message) {
this.userName = userName;
this.message = message;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
事件处理类CharteventListener.java
package com.gwzx.gwzxyw.socket.test; import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.DataListener; public class CharteventListener implements DataListener<ChatObject> { SocketIOServer server; public void setServer(SocketIOServer server) {
this.server = server;
} @Override
public void onData(SocketIOClient client, ChatObject data,
AckRequest ackSender) throws Exception {
// TODO Auto-generated method stub
// chatevent为 事件的名称,data为发送的内容
System.out.println("服务器收到 "+ data.getUserName() +" 消息:"+data.getMessage());
System.out.println("服务器广播消息给borad事件");
data.setMessage("server");
this.server.getBroadcastOperations().sendEvent("broad", data);
} }
3:编写 JAVA 客户端
package com.gwzx.gwzxyw.socket.test; import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter; import org.json.JSONException;
import org.json.JSONObject; public class ClientDemo {
private static Socket socket = null; public static void main(String[] args) {
try {
IO.Options opts = new IO.Options();
opts.query = "token=123456"; //传参数 socket = IO.socket("http://localhost:9093", opts);
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("客户端连接成功");
JSONObject json = new JSONObject();
try {
json.put("userName", "gmh");
json.put("message", "gmh");
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("客户端发送测试数据:" + json.toString());
socket.emit("chatevent", json);
}
}).on("broad", new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject obj = (JSONObject)args[0];
System.out.println("客户端 收到 服务器broad事件数据:" + obj);
}
}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {
@Override
public void call(Object... args) {
System.out.println("disconnect");
}
});
socket.connect();
} catch (Exception e){
e.printStackTrace();
}
}
}
4:编写 JS 客户端, 当然需要下载socket.io.js 连接http://www.bootcdn.cn/socket.io/
var socket = io.connect('locahost:9093',{query: 'token=123456'});
socket.on('connect', () => {
console.log("Client connect=====>socket id:" + socket.id);
socket.emit('chatevent', {
userName : "123",
message : "测试"
});
});
socket.on('broad', function (data) {
console.log(data);
});
socket.on('disconnect', function () {
console.log("Client disconnected!");
});
socket.on('reconnect', function () {
console.log("Client reconnected!");
});
socket.on('reconnecting', function () {
console.log("Client reconnecting'!");
});
个人温馨提示:
java中socket.emit(事件, 此处为org.json.JSONObject对象 )
JSONObject 的put数据后, json.toString() 顺序是乱的
Socket IO Web实时推送的更多相关文章
- WEB 实时推送技术的总结
前言 随着 Web 的发展,用户对于 Web 的实时推送要求也越来越高 ,比如,工业运行监控.Web 在线通讯.即时报价系统.在线游戏等,都需要将后台发生的变化主动地.实时地传送到浏览器端,而不需要用 ...
- GoEasy实现web实时推送过程中的自动补发功能
熟悉GoEasy推送的朋友都知道GoEasy推送实现web实时推送并且能够非常准确稳定地将信息推送到客户端.在后台功能中查看接收信息详情时,可有谁注意到有时候在发送记录里有一个红色的R标志?R又代表的 ...
- 【原创】node+express+socket搭建一个实时推送应用
技术背景 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新. 应用场景: 监控系统:后台硬件热插拔.LED.温度.电压发生变化 即 ...
- Spring MVC 实现web Socket向前端实时推送数据
最近项目中用到了webSocket服务,由后台实时向所有的前端推送消息,前端暂时是不可以发消息给后端的,数据的来源是由具体的设备数据收集器收集起来,然后通过socket推送给后端,后端收到数据后,再将 ...
- PHP使用GOEASY实现WEB实时推送
/** * 订单提醒 */ public function sendOrderNotice(){ //请求地址 $uri = "http://goeasy.io/goeasy/publish ...
- 关于 实时推送技术--WebSocket的 知识分享
今天学习了关于WebSocket的知识,觉得挺有用的,在这记录一下,也和大家分享一下!!有兴趣的可以看看哦 WebSocket简介 Web领域的实时推送技术,也被称作Realtime技术.这种技术要达 ...
- 基于socket.io的实时消息推送
用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...
- 基于HTTP协议之WEB消息实时推送技术原理及实现
很早就想写一些关于网页消息实时推送技术方面的文章,但是由于最近实在忙,没有时间去写文章.本文主要讲解基于 HTTP1.1 协议的 WEB 推送的技术原理及实现.本人曾经在工作的时候也有做过一些用到网页 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...
随机推荐
- vulcanjs schemas&& collections
一张参考图 说明 从上图我们可以方便的看出schmea 能做的事情 Generate a GraphQL equivalent of your schema to control your Graph ...
- php利用curl获取网页title内容
/**$html = curl_get_file_contents($url); $title = get_title_contents($html); var_dump($title);*/ fun ...
- php 备份和恢复数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 【转】linux下终端命令快捷键
原文网址:http://daaoao.blog.51cto.com/2329117/554177 linux下使用终端不可避免. 使用终端快捷键,当然会使你如虎添翼.记住他们吧 终端快捷键 tab=补 ...
- 【转】每天一个linux命令(4):mkdir命令
原文网址:http://www.cnblogs.com/peida/archive/2012/10/25/2738271.html linux mkdir 命令用来创建指定的名称的目录,要求创建目录的 ...
- nginx 知识点
全部指令目录(淘宝翻译):http://tengine.taobao.org/nginx_docs/cn/docs/dirindex.html nginx 命令语法: nginx -s [signal ...
- netty初步
netty是java的高性能socket框架,linux下基epoll,这里不对他多牛逼作分析,网上资料很多,这里针对一般socket的业务作个例子 几个基本概念: channel类似于socket句 ...
- jsoncpp构造json字符串和json数组
jsoncpp构造json字符串和json数组 参考文章:Jsoncpp的简单使用 下载json文件夹放在c++项目的include目录下,在CMakeLists中include进去,然后就可以在代码 ...
- adb命令查看app的日志
前言 在做app测试的时候,经常会遇到异常,此时如果开发没有异常保存,那么测试就得通过adb命令来查看日志信息.基于Windows平台的操作: logcat输出日志 一.把日志输出到手机指定目录 其命 ...
- Monit安装与配置
Monit安装与配置 monit 监控并自动重启服务 官方文档