我正要写一个通过TCP流的消息协议。接收者需要知道消息边界在哪里。写一个流协议:消息大小字段或消息分隔符?
我可以发送1)固定长度的消息,2)大小字段,因此接收者知道消息有多大,或者3)唯一的消息终止符(我想这不能用在消息的任何其他地方) 。
为了提高效率,我不会使用#1。
我喜欢#2,但它有可能使流不同步?
我不喜欢想法#3,因为它意味着接收者无法提前知道消息的大小,并且还要求终结符不会出现在消息的其他地方。
#2,如果有可能不同步,我可以添加一个终止符,或者我保证永远不会失去同步,只要发送者程序发送的内容是正确的。是否有必要做#2 AND#3?
请让我知道。
感谢, JBU
_另外,在传输的早期就知道消息的大小,这样可以更容易地在接收端分配内存。一句关心的话:确保限制分配多少内存。否则,您很容易受到使用自定义数据包的DDoS攻击,这些数据包的大小字段为2^32-1(或者您的整数大),从而快速填满您的内存。 – Kenji 2017-04-21 18:13:48