我正要寫一個通過TCP流的消息協議。接收者需要知道消息邊界在哪裏。寫一個流協議:消息大小字段或消息分隔符?
我可以發送1)固定長度的消息,2)大小字段,因此接收者知道消息有多大,或者3)唯一的消息終止符(我想這不能用在消息的任何其他地方) 。
爲了提高效率,我不會使用#1。
我喜歡#2,但它有可能使流不同步?
我不喜歡想法#3,因爲它意味着接收者無法提前知道消息的大小,並且還要求終結符不會出現在消息的其他地方。
#2,如果有可能不同步,我可以添加一個終止符,或者我保證永遠不會失去同步,只要發送者程序發送的內容是正確的。是否有必要做#2 AND#3?
請讓我知道。
感謝, JBU
_另外,在傳輸的早期就知道消息的大小,這樣可以更容易地在接收端分配內存。一句關心的話:確保限制分配多少內存。否則,您很容易受到使用自定義數據包的DDoS攻擊,這些數據包的大小字段爲2^32-1(或者您的整數大),從而快速填滿您的內存。 – Kenji 2017-04-21 18:13:48