我即将编写一个通过 TCP 流的消息协议(protocol)。接收者需要知道消息边界在哪里。

我可以发送 1) 固定长度的消息,2) 大小字段以便接收者知道消息有多大,或者 3) 一个唯一的消息终止符(我想这不能在消息的其他任何地方使用)。

出于效率原因,我不会使用 #1。

我喜欢#2,但是流有可能不同步吗?

我不喜欢想法#3,因为这意味着接收者无法提前知道消息的大小,并且还要求终止符不会出现在消息的其他地方。

使用#2,如果有可能不同步,我可以添加一个终止符还是我保证永远不会失去同步,只要发送方程序发送的内容是正确的?是否有必要做 #2 和 #3?

请告诉我。

谢谢,
吉布

最佳答案

您使用的是 TCP,数据包传递是可靠的。因此,连接要么断开,超时,要么您将阅读整条消息。
所以选项#2 是可以的。

关于stream - 编写流协议(protocol) : Message size field or Message delimiter?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1046637/

10-15 13:44