OGeek|极客世界-中国程序员成长平台

标题: android - 使用 socket.io 中的每个 socket.emit 获取多个套接字响应 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:41
标题: android - 使用 socket.io 中的每个 socket.emit 获取多个套接字响应

这是我的代码示例,我通过单个套接字发射获得了对同一用户的多个套接字响应。有时它也会在每次服务器重启时增加 +1。

....    
socket.emit('groupmessage', {
                                        username: sender_id,
                                        server_chat_id:chat_id,
                                        user_message:"ownmessage",
                                        server_time:server_time,
                                        message: new_message,
                                        action: "ownmessage",
                                        temp: 'new'
                        });
....



Best Answer-推荐答案


Its because your socket.on(event, listener) is executed multiple times (for same event).

这里有一些可能会有所帮助的东西。

关于:通过套接字的响应被附加到 EventListener 接收。

// Initialize socket
socket = IO.socket(SERVER_URL);

// Turn on event
socket.on(event, listener);
// connect the socket
socket.connect();

// emit data
socket.emit(event, "data");

// disconnect socket
mSocket.disconnect();
// Turn Events Off
socket.off(event, listener);

问题原因:当一个事件被添加到同一个监听器的多个实例时,该 Action 被执行相同的次数。

原因:添加多个监听器可能会导致

  1. 之前的 Activity 仍然持有对 Connected Socket 的引用,该 Socket 仍然活着,具有相同的 Event。
  2. 在 Activity 回调中对 Socket 的处理不当,导致 socket.on(event, listener)socket.off(event, listener) 之间的同步失效。

解决方案:

  1. onResume() 中打开 ON 事件监听器和 CONNECT 套接字。

  2. DISCONNECT套接字并在onPause()关闭监听器。

关于android - 使用 socket.io 中的每个 socket.emit 获取多个套接字响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39798620/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4