socket.io下的可靠消息?

Mar*_*ark 22 node.js socket.io

API提供发出/发送回调机制来确认收到的消息.但是,如果断开连接或错误,则不会触发此回调.在我看来,在断开连接时,需要经历一些相当混乱的过程来清理未完成的已发送消息(例如 - 假设您可能希望存储消息以便稍后转发的用例等).关于如何实现这一点的任何简单的想法?想知道我是否遗漏了什么....谢谢.

Ben*_*aum 36

真正的潜在问题

这个问题不仅限于此socket.io.这是一个众所周知的问题,称为两个将军的问题.

两名军队由一名将军领导,准备袭击一座要塞的城市.军队在城市附近安营扎寨,每个都在自己的山上.一个山谷将两座山丘分开,两位将军交流的唯一途径就是派遣信使穿过山谷.不幸的是,山谷被城市的守卫所占据,并且有可能被捕获的任何特定信使将被捕获(这种情况假设两位将军同意他们会攻击,他们没有同意时间在各自的山丘上占据阵地之前的攻击).

您正试图通过不可靠的链接获得Common Knowledge.

在通过socket.io链路的通信的任何阶段都可以被打破,并且callback可以发送a但是另一方不能确定它到达.

什么可以完成

你需要接受这个事实总是有可能的事实.对此没有简单的解决方案.在Multi-Agent Systems研究等领域,这个问题及其推广仍在积极研究中.

在您的具体案例中仍然可以做些什么

有一些常见的方法可以缓解这个问题.

我在设计应用程序时所做的socket.io是将ID附加到消息,如果发生断开连接并且一方尝试发送已发送的消息,接收方将知道该消息已经被接收.

请注意,在实践中,您无需在任何地方执行此操作.

更多阅读问题