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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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");
                        }
                    });
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

非ban必选

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

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

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

打赏作者

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

抵扣说明:

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

余额充值