关于springboot+netty-socketio的一个bug

后端springboot+netty-socketio

前端每次连接后,都会触发两次@OnConnect

这是为什么呢

### 集成Netty-SocketIO实现Spring Boot中的实时通信 在Spring Boot项目中集成Netty-SocketIO可以有效支持WebSocket协议,从而实现实时双向通信。这不仅限于简单的消息推送,还可以用于构建聊天应用、在线游戏或其他任何需要低延迟交互的应用场景。 #### 添加依赖项 要在Spring Boot应用程序中使用Netty-SocketIO,首先需引入必要的Maven或Gradle依赖: 对于Maven配置文件`pom.xml`应加入如下内容[^1]: ```xml <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>2.0.7</version> </dependency> ``` 而对于采用Gradle构建工具,则应在`build.gradle`里添加: ```groovy implementation 'com.corundumstudio.socketio:netty-socketio:2.0.7' ``` #### 初始化Socket.IO服务器实例 创建一个新的Java类来启动并配置Socket.IO服务端口监听器。通常情况下会将其设置为与现有HTTP(S)服务器不同的端口号运行,以便区分两者之间的流量。 下面是一个基本的例子展示如何初始化一个Socket.IO Server对象,并指定其绑定地址以及端口等参数: ```java import com.corundumstudio.socketio.SocketIOServer; // ... other imports ... @Configuration public class SocketIoConfig { @Bean public SocketIOServer socketIOServer() { Configuration config = new Configuration(); config.setHostname("localhost"); config.setPort(9092); return new SocketIOServer(config); } } ``` #### 处理连接事件 通过定义特定的方法处理客户端发起的不同类型的请求(如建立连接、断开连接),这些方法可以通过注解的形式注册到相应的处理器上。例如,在接收到新的客户端连接时触发某些逻辑操作;当某个已存在的连接被关闭时执行清理工作等等。 ```java @EventListener(ApplicationReadyEvent.class) public void startListeningForEvents() throws InterruptedException, ExecutionException, TimeoutException { socketIOServer.addEventListener("chat message", ChatMessage.class, (client, data, ackRequest) -> { System.out.println("received chat message from client " + client.getSessionId().toString()); // Broadcast the received message to all connected clients. socketIOServer.getBroadcastOperations().sendEvent("chat message", data); }); socketIOServer.start(); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { socketIOServer.stop(); } catch (IOException e) { throw new RuntimeException(e); } })); } ``` 以上代码片段展示了如何监听来自前端发送过来的消息事件(`chat message`)并将之广播给所有当前处于活动状态下的订阅者们。 #### 启动Spring Boot应用 完成上述配置之后就可以正常编译打包部署该程序了。如果一切顺利的话,现在应该可以在浏览器控制台或者其他测试工具里面尝试向这个新搭建起来的服务发送一些简单的JSON格式的数据包来进行初步验证[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值