netty-socket.io群聊(Room) 消息确认机制

本文介绍了如何在Netty-Socket.IO框架下实现群聊Room的消息确认机制。通过设置BroadcastAckCallback,当客户端收到消息后需要发送确认回执。如果客户端在指定时间内未发送确认,服务端将触发超时回调。通过示例代码展示了客户端连接、服务端发送群聊消息以及处理不同回调状态的过程,包括onClientTimeout、onClientSuccess和onAllSuccess。在测试中,关闭某个客户端的回调功能,服务端能够准确检测到超时情况并作出相应响应。
摘要由CSDN通过智能技术生成

1、pom文件

 <dependency>
      <groupId>com.corundumstudio.socketio</groupId>
      <artifactId>netty-socketio</artifactId>
      <version>1.7.19</version>
  </dependency>

2、设定三个客户端,即三个用户 userName分别是 97 ,98 ,99

客户端连接到服务器后都加入房间room1,服务端代码如下。


        Configuration config = new Configuration();
        config.setHostname("0.0.0.0");
        config.setPort(9092);

        final SocketIOServer server = new SocketIOServer(config);

        server.addConnectListener(new ConnectListener() {
            @Override
            public void onConnect(SocketIOClient socketIOClient) {
                //加入房间
                System.err.println(socketIOClient.getHandshakeData().getSingleUrlParam("userName")+"加入房间room1");
                socketIOClient.joinRoom("room1");
            }
        });

3、服务端发送群聊消息如下

      //房间发送消息
                int size = server.getRoomOperations("room1").getClients().size();
                if (size == 3){
                    //房间客户端数等于3 执行房间广播  BroadcastAckCallback 第二个参数是超时时间
                    server.getRoomOperations("room1").sendEvent("groupEvent",ackChatObjectData,new BroadcastAckCallback<ChatObject>(ChatObject.class,10){


                        @Override
                        protected void onClientTimeout(SocketIOClient client) {
//房间里某一个客户端收到消息的回调超时
                            super.onClientTimeout(client);
                            String userName = client.getHandshakeData().getSingleUrlParam("userName");
                            System.err.println("onClientTimeout"+userName);

                        }

                        @Override
                        protected void onClientSuccess(SocketIOClient client, ChatObject result) {
                            //房间里某一个客户端收到消息的回调成功
                            super.onClientSuccess(client, result);
                            String userName = client.getHandshakeData().getSingleUrlParam("userName");
                            System.err.println("onClientSuccess"+userName);

                        }

                        @Override
                        protected void onAllSuccess() {
                            super.onAllSuccess();
                            //所有在线的客户端全部收到消息的回调成功
                            System.err.println("onAllSuccess");
                        }
                    });
   
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
uni-socket.io 是一款适用于多端(包括 Web、小程序、APP 等)的 Socket.io 解决方案,而 SpringBoot 是一款基于 Spring 框架的快速开发框架。如果你想在 SpringBoot 中使用 uni-socket.io,可以按照以下步骤进行: 1. 添加依赖:在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>netty-socketio</artifactId> <version>1.7.17</version> </dependency> <dependency> <groupId>com.corundumstudio.socketio</groupId> <artifactId>socketio-spring-boot-starter</artifactId> <version>1.7.17</version> </dependency> ``` 2. 配置 SocketIO 服务器:在 SpringBoot 应用的配置文件 application.properties 中添加以下内容: ``` socketio.host=localhost socketio.port=9092 ``` 3. 编写 SocketIO 事件处理程序:编写一个实现了 SocketIOServerAware 接口的类,然后在该类中实现所有需要处理的事件。 ``` @Component public class ChatEventHandler implements SocketIOServerAware { private SocketIOServer server; @Autowired private ChatService chatService; @Override public void setSocketIOServer(SocketIOServer server) { this.server = server; } @OnConnect public void onConnect(SocketIOClient client) { // 处理连接事件 } @OnDisconnect public void onDisconnect(SocketIOClient client) { // 处理断开连接事件 } @OnEvent("chat") public void onChat(SocketIOClient client, ChatMessage message) { // 处理聊天事件 } } ``` 4. 启动 SocketIO 服务器:编写一个启动类,然后在该类中创建 SocketIOServer 对象并启动服务器。 ``` @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public SocketIOServer socketIOServer() { Configuration config = new Configuration(); config.setHostname("localhost"); config.setPort(9092); SocketIOServer server = new SocketIOServer(config); server.addListeners(new ChatEventHandler()); server.start(); return server; } } ``` 完成上述步骤后,你就可以在 SpringBoot 应用中使用 uni-socket.io 进行多端的 Socket.io 开发了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值