【发布时间】:2012-07-31 03:53:46
【问题描述】:
在我深入研究代码之前,谁能告诉我是否有任何文档可用于在 Socket.IO 中确认交付?
以下是我目前能够收集到的信息:
- 可以提供回调以在消息被确认时调用
- 有一种特殊模式“volatile”不能保证交付
- 有一个默认模式不是“易失性”
这给我留下了一些问题:
- 如果消息不是易失性的,它是如何处理的?会无限期缓冲吗?
- 如果消息无法在合理的时间内送达,有什么方法可以得到通知?
- 如果我想放弃,有什么方法可以取消缓冲消息?
对于如何在时间敏感的应用程序中使用 Socket.IO 而不退回到易失性模式并使用可以提供故障事件和某种程度的可配置性的外部 ACK 层,我有点茫然。还是我错过了什么?
【问题讨论】:
-
以下是我通过浏览代码收集到的内容。请不要把它当作权威 - 在某些情况下我可能完全错了。
-
Socket.IO 不会重新发送任何数据。底层传输(即 TCP)有自己的重发机制,但 Socket.IO 不公开对它们的任何控制。
-
当(非易失性)消息通过未打开的传输在“套接字”上发送时,该消息将被放入队列中,以便在打开传输时发送。消息可以排队的时间似乎没有任何限制,尽管当“套接字”本身关闭时队列会被清除。
-
如果消息需要确认(回调),则会将条目添加到哈希表中,将消息 ID 映射到其回调函数。当并且如果返回确认数据包时,则调用回调。如果消息本身或确认被丢弃,回调将永远不会触发。
-
我发布这个问题已经快一年了,似乎没有人对此主题有任何补充。我希望能从更了解 Socket.IO 的人那里得到一些反馈。你可以把上面的笔记记下来,因为它们是令人毛骨悚然的,但目前我不知道我的结论当时或现在有多准确或相关。就我而言,这是一个悬而未决的问题。