netty中使用socketio
时刻不忘拜读API:vue.js 官方文档拜读 git源代码地址: Socket.IO-client Java api文档地址: socket.io(node.js接口)
值得深入研究的API接口文档: 【javascript】 node.js版本的API
netty-socketio 概述 netty-socketio是一个开源的Socket.io服务器端的一个java的实现,它基于Netty框架,可用于服务端推送消息给客户端。
说到服务端推送技术,一般会涉及WebSocket,WebSocket是HTML5最新提出的规范,虽然主流浏览器都已经支持,但仍然可能有不兼容的情况,为了兼容所有浏览器,给程序员提供一致的编程体验,
SocketIO将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口,也就是说,使用SocketIO时不用担心兼容问题,底层会自动选用最佳的通信方式。
netty-socketio 示例demo
pom.xml
@SpringBootApplication @Slf4j public class NettySocketioApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(NettySocketioApplication.class, args);
}
@Autowired
private SocketIOServer socketIOServer;
@Override
public void run(String... strings) {
socketIOServer.start();
log.info("socket.io启动成功!");
}
} Message 消息类
@Data public class Message {
private String id; // 消息ID
private String msg; // 消息内容
private Date sendDate; // 发送日期
} 配置类 NettySocketioConfig
@Configuration public class NettySocketioConfig { /** * netty-socketio服务器 */ @Bean public SocketIOServer socketIOServer() { com.corundumstudio.socketio.Configuration config = new com.corundumstudio.socketio.Configuration(); config.setHostname(“localhost”); config.setPort(9092);
SocketIOServer server = new SocketIOServer(config);
return server;
}
/**
* 用于扫描netty-socketio的注解,比如 @OnConnect、@OnEvent
*/
@Bean
public SpringAnnotationScanner springAnnotationScanner() {
return new SpringAnnotationScanner(socketIOServer());
}
} 消息处理器 MessageEventHandler
@Component @Slf4j public class MessageEventHandler {
@Autowired
private SocketIOServer socketIoServer;
public static ConcurrentMap<String, SocketIOClient> socketIOClientMap = new ConcurrentHashMap<>();
/**
* 客户端连接的时候触发
*
* @param client
*/
@OnConnect
public void onConnect(SocketIOClient client) {
String mac = client.getHandshakeData().getSingleUrlParam("mac");
//存储SocketIOClient,用于发送消息
socketIOClientMap.put(mac, client);
//回发消息
client.sendEvent("message", "onConnect back");
log.info("客户端:" + client.getSessionId() + "已连接,mac=" + mac);
}
/**
* 客户端关闭连接时触发
*
* @param client
*/
@OnDisconnect
public void onDisconnect(SocketIOClient client) {
log.info("客户端:" + client.getSessionId() + "断开连接");
}
/**
* 客户端事件
*
* @param client 客户端信息
* @param request 请求信息
* @param data 客户端发送数据
*/
@OnEvent(value = "messageevent")
public void onEvent(SocketIOClient client, AckRequest request, Message data) {
log.info("发来消息:" + data);
//回发消息
client.sendEvent("messageevent", "我是服务器都安发送的信息");
//广播消息
sendBroadcast();
}
/**
* 广播消息
*/
public void sendBroadcast() {
for (SocketIOClient client : socketIOClientMap.values()) {
if (client.isChannelOpen()) {
client.sendEvent("Broadcast", "当前时间", System.currentTimeMillis());
}
}
}
} html 页面
<!doctype html>
Socket.io Test
Waiting for input
hello world!
mvn spring-boot:run 点击网页按钮
Netty】Netty 入门案例分析 ( Netty 模型解析 | Netty 服务器端代码 | Netty 客户端代码 )
https://blog.csdn.net/shulianghan/article/details/106522195
socket.io 使用protobuf 协议发送消息
https://blog.csdn.net/cn_yaojin/article/details/128317056
SpringBoot集成netty-socketio
https://www.jianshu.com/p/d7cf8982b9e4
即时通讯 | 记一次从0-1搭建IM在线实时聊天进阶思考过程
https://www.modb.pro/db/579407
Source code analysis of Netty startup process (based on 4.1.23)
———————————————— 版权声明:本文为CSDN博主「蜗牛杨哥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/u014635374/article/details/115893751