Socket.io 插座io广播、房间和确认功能

Socket.io 插座io广播、房间和确认功能,socket.io,Socket.io,我们正在研究聊天应用程序的套接字io实现。 寻找确认支持以处理广播时丢失的消息我们正在寻找确认支持。 根据文档,socket io不支持广播/会议室中的回调 e、 在“房间1”中,我们向该房间内的所有插座发送广播信息。我们如何在没有回拨的情况下检查某些用户/套接字是否错过了消息。我们将如何在系统中处理这个问题 下面的代码不起作用 io.sockets.in(data.room).emit('message', data, function(responseData){ c

我们正在研究聊天应用程序的套接字io实现。 寻找确认支持以处理广播时丢失的消息我们正在寻找确认支持。 根据文档,socket io不支持广播/会议室中的回调

e、 在“房间1”中,我们向该房间内的所有插座发送广播信息。我们如何在没有回拨的情况下检查某些用户/套接字是否错过了消息。我们将如何在系统中处理这个问题

下面的代码不起作用

io.sockets.in(data.room).emit('message', data, function(responseData){
            console.log(responseData);
        });
根据以下问题 广播时不支持回调


处理此场景的其他方法有哪些。

为了解决您的问题,需要将房间的消息保存在某个位置,然后根据需要重新发送给各个客户端

存储消息最明显的地方是服务器端,即数据存储区(如Redis)。将每个对话有效地存储为事件列表,并在发生新事件时添加新事件

一个简单的方案如下所示:

  • 每个广播消息都附加了一个UUID。当服务器处理新邮件时,它会将该邮件附加到该“文件室”的列表中
  • 当客户端连接/重新连接时,它会发送一条消息(例如“LAST_message_RECEIVED”),指示它接收的最后一条消息的UUID
  • 当服务器收到其中一条“LAST_MESSAGE_RECEIVED”消息时,它会检查这是否是房间的最新消息,如果不是,它会向单个套接字发送一条消息,其中包含一组丢失的消息。客户端现在是最新的
备选方案:如果您不需要在会话结束后保留历史记录,您可以聪明地利用其他客户端已经在存储消息的事实,并要求客户端以对等方式重新发送消息。这避免了您需要拥有自己的服务器端数据存储