Node.js Socket.IO已确认交付
在我深入研究代码之前,有人能告诉我Socket.IO中是否有可供确认交付的文档吗 以下是我迄今为止收集到的信息:Node.js Socket.IO已确认交付,node.js,socket.io,Node.js,Socket.io,在我深入研究代码之前,有人能告诉我Socket.IO中是否有可供确认交付的文档吗 以下是我迄今为止收集到的信息: 可以提供回调,以便在确认消息时调用 有一种特殊模式“volatile”,不能保证交付 存在一种非“易失性”的默认模式 这给我留下了一些问题: 如果消息不是易失性的,如何处理它?它会被无限期地缓冲吗 如果邮件无法在合理的时间内送达,有没有办法得到通知 如果我想放弃的话,有没有办法解除我的留言 对于如何在时间敏感的应用程序中使用Socket.IO而不返回到易失性模式,以及如何使用能够提供
对于如何在时间敏感的应用程序中使用Socket.IO而不返回到易失性模式,以及如何使用能够提供故障事件和某种级别的可配置性的外部ACK层,我有点不知所措。还是我遗漏了什么;博士,除非你愿意等到宇宙消亡,否则你无法获得可靠的确认分娩。
您寻求的交货确认书与理论交货确认书有关,这一点在中也有讨论 TCP通过保证无限次重试后的交付来管理可靠性问题。我们生活在一个有限的宇宙中,因此“保证”一词在理论上是可疑的:——)
理论除外,考虑如下:SokKo.IO 1 .x的基础,使用以下传输:
- 网袋
- 插座
- XHR轮询
- JSONP轮询
- 给我的邮件编号
- 有疑问时要求重新发送
- 不要改变我的状态-客户端或服务器-除非我知道我已经准备好了
有保证的消息传递确认被证明是不可能的,但TCP保证在“无限”重试的情况下传递和订购。我对socket.io消息不太自信,但它们确实强大且易于使用,所以我使用它们时非常小心。我使用不同的策略确保了交付
下面是我通过浏览代码收集到的信息。请不要将其视为权威-在某些情况下,我可能完全错了。Socket.IO不会重新发送任何数据。底层传输(即TCP)有其自己的重发机制,但Socket.IO不公开对它们的任何控制。当(非易失性)消息通过未打开的传输在“Socket”上发送时,该消息将被放入队列中,以便在传输打开时发送。消息排队的时间似乎没有任何限制,但当“套接字”本身关闭时,队列会被清除。如果消息需要确认(回调),则会向哈希表添加一个条目,将消息id映射到其回调函数。如果返回确认数据包,则调用回调。如果消息本身或确认被丢弃,回调将永远不会触发。据我所知,“套接字”的回调散列永远不会被清除,无论是否收到ack。我认为这将是一个严重的问题,除非我遗漏了什么。+1表示“除非你愿意等到宇宙消亡,否则你无法获得可靠的确认交付。”