【发布时间】:2012-03-23 14:54:31
【问题描述】:
我正在 node.js 中开始一个学校项目。这是一个由几个通过 TCP 套接字连接的 node.js 服务器组成的系统。
我尝试了一些 TCP 库(来自 node 本身的 Net 模块,来自 nodejitsu 的 nssocket,现在我正在尝试 zeromq),但它们似乎没有一个重要功能:消息传递确认。
我想要的是某种允许执行以下操作的库:
client.connect(server, port);
client.send(data, function callback(err, res) { ... });
在消息传递后或发送过程中发生错误(超时、网络故障)时,将调用回调函数。
我在想我会在 TCP 上编写自己的协议,但我更喜欢一些更健壮和经过测试的协议。
感谢任何建设性的回答:)
【问题讨论】:
-
我认为你必须发回一些东西说“是的,我知道了”才能确定。即使它到达最终的物理目的地,缓冲等呢?再加上这是 TCP,没有“消息”之类的东西。这是一个流。
-
是的,我想到了这样的事情。但是现在当“是的,我知道了”数据包丢失时我该怎么办?缓冲并不是一个真正的问题(我认为) - 我使用处理它的 nssocket 库(或者我可以简单地编写一些包装器,为数据添加分隔符......)。我一直在寻找的是某种库,它通过 TCP 提供“消息抽象”,并确保消息是传递还是丢失......这个要求对我来说绝对是至关重要的(我不认为它是异国情调 :) 我几乎可以肯定其他人一定也处理过它......)
-
Err,TCP 中不存在“丢失数据包”之类的东西,或者实际上没有“数据包”之类的东西。它是一个流,并且该流中字节的传递和顺序是保证(除非套接字关闭或其他什么,显然)。 不保证的是数据是否会被分散或集中在一起。
-
好的,我可能应该更深入地了解 TCP。谢谢!
标签: node.js