在这样的场景中,是否有支持长轮询客户端的良好解决方案:
sockets.in("room1").volatile.emit(message);
sockets.in("room2").volatile.emit(message);
客户在两个房间,只收到其中一个房间的消息。我想这与长轮询有关。当我从后者发射中删除“volatile”时,它可以工作 - 但还有另一种方法吗?
附带问题:不使用VOLATILE会有副作用吗?就像服务器抛出异常等一样,我可以想象它伴随着开销的增加。服务器执行了多少次重发?
祝你好运, 的Mattias
答案 0 :(得分:0)
实际上,挥发性更不稳定。如果在最后一次发送数据后轮询没有到达服务器,它就会消失。您不需要使用volatile。如果你不使用它,它将排队所有发射,如果尚未达到连接,当它到达时,它将按顺序执行。根据我的经验,我无法看到使用volatile的任何优势。
关于volatile的Socket.io第一页的文字: “有时可以删除某些消息。假设您有一个应用程序显示关键字bieber的实时推文。
如果某个客户端尚未准备好接收消息(由于网络速度缓慢或其他问题,或者因为他通过长轮询连接并处于请求 - 响应周期中),如果他没有接收与bieber相关的所有推文,您的申请不会受到影响。
在这种情况下,您可能希望将这些消息作为易失性消息发送。“