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项目实战教程实战 ...
随机推荐
- Keepalived+HAProxy实现RabbtiMQ高可用的负载均衡
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在 ...
- FP-growth算法发现频繁项集(二)——发现频繁项集
上篇介绍了如何构建FP树,FP树的每条路径都满足最小支持度,我们需要做的是在一条路径上寻找到更多的关联关系. 抽取条件模式基 首先从FP树头指针表中的单个频繁元素项开始.对于每一个元素项,获得其对应的 ...
- hadoop 知识点
HDFS 命令 命令 说明 fsck 检查文件的完整性 start-balancer.sh 重新平衡HDFS hdfs dfs -copyFromLocal 从本地磁盘复制文件到HDFS hadoop ...
- JSON.stringify、JSON.parse、toJSON 区别
JSON.stringify 方法 将一个 JavaScript 值转换为一个 JSON 字符串 可以将数组.对象等转换后的 JSON 字符串,保存在 sessionStorage.localStor ...
- HTTP报头:通用报头,请求报头,响应报头和实体报头
缓存控制优先级从高到低分别是Pragma -> Cache-Control -> Expires 报头 每一个报头都是由 [名称 + ":" + 空格 + 值 + ] ...
- CF 914F Substrings in a String——bitset处理匹配
题目:http://codeforces.com/contest/914/problem/F 可以对原字符串的每种字母开一个 bitset .第 i 位的 1 表示这种字母在第 i 位出现了. 考虑能 ...
- Spring和Quartz集成
本文转载自:http://blog.csdn.net/u010648555/article/details/54891264 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企 ...
- 接口测试3-4使用csv进行接口测试
参照前面的例子 向URL发送corpid和corsecret2个参数,可以获取正确的tokenid https://qyapi.weixin.qq.com/cgi-bin/gettoken 数据 场景 ...
- Linux 简单命令查询CPU、内存、网卡等信息
[转自]Linux查询CPU.内存.网卡等信息 看CPU信息(型号)# cat /proc/cpuinfo | grep name | cut -f2 -d: |uniq -c 1 Int ...
- Win10巧用自带输入法轻松打出特殊字符
给电脑输入信息时,如果要用上键盘上没有的特殊符号,那就为难了.其实,在Win10中,自带的微软拼音就能让你轻松输入键盘上没有的符号.下面来看看Win10如何输入特殊符号. 微软拼音不但中文输入智能化做 ...