我已經使用了幾個協議,並自己寫了。我已經寫了一些只有1個字符的消息格式來標識消息,有些消息格式只有4個字符。我並不覺得自己有足夠的經驗去分辨哪個更好,所以我正在尋找一個答案來描述在哪種情況下可能比另一個好。郵件標題/前綴應該多長時間?
爲了提高性能,您可以想象,發送2個字節(A%1i
)比發送5個字節(ABCD%1i
)要快。但是,我注意到,在使用1字節前綴編寫協議時,如果您有一個導致代碼不能從套接字讀取足夠數據的錯誤,那麼您可能會將垃圾數據存入您的系統。
那麼4字節前綴的目的是爲了保證你的消息是乾淨的嗎?對於你的表演來說,它值得嗎?你是否真的對任何表演感到厭惡?也許最好有2或3字節的前綴?
我不確定這個問題應該是特定於TCP還是它適用於所有傳輸協議。對此的建議很有意思。
更新:爲了引起關注,我會提到Synergy使用4字節的消息前綴,因此對於鼠標移動增量,頭部與實際數據大小相同。有些人建議只有1或2字節的前綴來提高效率。我不知道這會有什麼缺點?
更新:此外,我不知道是否只有握手真的很重要,如果你擔心垃圾數據。 Synergy有很長的握手時間(幾個字節),所以需要4字節的消息前綴?我最近制定了一個只有1字節握手的協議,結果這是一個糟糕的主意,因爲不兼容的協議會向系統發送垃圾數據(這可能導致數據不準確,我可能會建議至少長時間握手) 。
性能影響取決於「有效載荷」包的大小。如果消息長度只有1個字節(只包含某種東西的二進制狀態),那麼額外的3個字節會產生相當大的影響,如果消息是5KB(或更多),額外的3個字節會產生可忽略的影響。經驗法則:我會說考慮任何大於有效載荷大小5%的東西。 AFAIK前綴的大小不影響錯誤處理和行爲,但我可能在這裏是錯誤的。 此外,如果您打算通過網絡發送單個消息,額外的3個字節可能根本無效。 – 2012-07-20 13:14:30
對於Synergy的作用,低延遲可能比低帶寬使用重要得多。我的直覺是,這是一種模式 - 如果你需要發送很多微小的更新,你不可能發送足夠的數據來佔用連接。 – millimoose 2012-07-22 17:14:56