我使用了一些协议,并编写了自己的协议。我编写了一些只有 1 个字符的消息格式来识别消息,有些则使用 4 个字符。我觉得我没有足够的经验来判断哪个更好,所以我正在寻找一个答案来描述在哪种情况下一个可能比另一个更好。
出于性能考虑,您可以想象发送 2 个字节 ( A%1i
) 比发送 5 个字节 ( ) 更快ABCD%1i
。但是,我注意到,在编写带有 1 字节前缀的协议时,如果您有一个错误导致您的代码无法从套接字读取足够的数据,您可能会收到垃圾数据进入您的系统。
那么 4 字节前缀的目的仅仅是为了保证您的消息是干净的吗?你牺牲的性能值得吗?你真的会牺牲任何表现吗?也许最好有 2 或 3 个字节的前缀?
我不确定这个问题是否应该特定于 TCP,或者它是否适用于所有传输协议。这方面的建议会很有趣。
更新:出于兴趣,我会提到 Synergy 使用 4 字节消息前缀,因此对于鼠标移动增量,标题与实际数据大小相同。有些人建议只使用 1 或 2 个字节的前缀来提高效率。我想知道这会有什么缺点?
更新:另外,如果您担心垃圾数据,我想知道是否只有握手真的很重要。Synergy 的握手时间很长(几个字节),那么需要 4 字节的消息前缀吗?我最近制定了一个只有 1 字节握手的协议,结果证明这是一个坏主意,因为不兼容的协议正在向系统发送错误数据(在此之后,我可能建议至少有一个长握手) .