gpt4 book ai didi

stream - 写流协议(protocol) : Message size field or Message delimiter?

转载 作者:行者123 更新时间:2023-12-04 01:58:18 26 4
gpt4 key购买 nike

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

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

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

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

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

使用#2,如果有可能不同步,我可以添加一个终结器吗,或者只要发送方程序发送的内容是正确的,我就可以保证永远不会不同步?有必要做#2和#3吗?

请告诉我。

谢谢,
吉布

最佳答案

如果您正在从头开始开发发送和接收代码,那么同时使用长度 header 和分隔符不会有什么坏处。这将提供稳健性和错误检测。考虑只使用#2 的情况。如果你在 TCP 流中写入一个长度为 N 的字段,但最终发送的消息的大小与 N 不同,接收端不会更好地了解并最终感到困惑。
如果你同时使用#2 和#3,虽然不是万无一失的,但如果接收者在从 TCP 流中消耗 N 个字节后遇到分隔符,则它可以有更大程度的信心认为它正确接收了消息。您还可以安全地在消息中使用分隔符。
看看 HTTP Chunked Transfer Coding对于同时使用 #2 和 #3 的真实示例。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com