我们正在研究聊天应用程序的socket io实现。 在广播期间寻找确认支持以处理丢失的消息我们正在寻求确认支持。 根据文档套接字io不支持广播/会议室中的回调。
e.g。在“房间1”中,我们向该房间内的所有插座发送广播消息。如何在没有回电的情况下检查某些用户/套接字错过了该消息。以及我们将如何在系统中处理它。
下面的代码不起作用。
io.sockets.in(data.room).emit('message', data, function(responseData){
console.log(responseData);
});
根据以下问题 https://github.com/socketio/socket.io-redis/issues/30 广播时不支持回叫。
处理此方案的其他方法是什么。
答案 0 :(得分:2)
为了解决您的问题,房间的消息需要在某处保留,然后根据需要重新发送给各个客户端。
在数据存储区(例如Redis)中,最明显的存储消息的位置是服务器端。将每个会话有效地存储为事件列表,并在事件发生时附加新事件。
一个简单的方案如下:
替代方案:如果您不需要在会话结束后保留历史记录,您可能会聪明并使用其他客户端已经存储消息的事实,并要求客户重新 - 以点对点的方式发送消息。这可以避免您需要拥有自己的服务器端数据存储区。