参考:基于netty-socketio的web推送服务、Spring Boot实战之netty-socketio实现简单聊天室(给指定用户推送消息)、socket.io 中文文档
socketio简介
Socket.io是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5.
socket.io特点
实时分析:将数据推送到客户端,这些客户端会被表示为实时计数器,图表或日志客户。
实时通信和聊天:只需几行代码便可写成一个Socket.IO的”Hello,World”聊天应用。
二进制流传输:从1.0版本开始,Socket.IO支持任何形式的二进制文件传输,例如:图片,视频,音频等。
文档合并:允许多个用户同时编辑一个文档,并且能够看到每个用户做出的修改。
Demo简介
服务端使用netty-socketio,客户端使用socket.io.js。
本例完全来自上面的链接,这里只是测试效果以及做备忘。本例实现的功能是一个用户向另外一个用法发小消息。
maven中添加依赖
<dependency>
<groupId>com.corundumstudio.socketio</groupId>
<artifactId>netty-socketio</artifactId>
<version>1.7.3</version>
</dependency>
服务端SocketServer
@Component
public class ChatServer implements InitializingBean {
@Autowired
private EventListenner eventListenner;
@Override
public void afterPropertiesSet() throws Exception {
Configuration config = new Configuration();
config.setPort(9098);
SocketConfig socketConfig = new SocketConfig();
socketConfig.setReuseAddress(true);
socketConfig.setTcpNoDelay(true);
socketConfig.setSoLinger(0);
config.setSocketConfig(socketConfig);
config.setHostname("localhost");
SocketIOServer server = new SocketIOServer(config);
server.addListeners(eventListenner);
server.start();
System.out.println("启动正常");
}
}
缓存类,缓存客户端连接
@Component("clientCache")
public class SocketIOClientCache {
//String:EventType类型
private Map<String,SocketIOClient> clients=new ConcurrentHashMap<String,SocketIOClient>();
//用户发送消息添加
public void addClient</