私はいくつかのプロトコルを使用し、独自のプロトコルを作成しました。メッセージを識別するために 1 文字のみのメッセージ形式と、4 文字のメッセージ形式を作成しました。どちらが優れているかを判断するのに十分な経験があるとは思わないので、どのシナリオでどちらが優れているかを説明する回答を探しています。
A%1i
パフォーマンスについては、2 バイトを送信する ( ) 方が 5 バイトを送信する ( ) よりも高速であると想像できますABCD%1i
。ただし、1 バイトのプレフィックスを使用してプロトコルを記述する場合、コードがソケットから十分なデータを読み取れないバグがある場合、システムに不要なデータが入ってくる可能性があることに気付きました。
では、4 バイトのプレフィックスの目的は、メッセージがクリーンであることを保証するためだけですか? あなたが犠牲にするパフォーマンスには価値がありますか?あなたは本当にパフォーマンスを犠牲にしていますか?たぶん、2バイトまたは3バイトのプレフィックスを付けたほうがよいでしょうか?
この質問が TCP に固有のものなのか、それともすべてのトランスポート プロトコルに当てはまるのかはわかりません。これに関するアドバイスは興味深いでしょう。
更新:興味深いことに、Synergy は 4 バイトのメッセージ プレフィックスを使用することに言及します。そのため、マウス移動デルタの場合、ヘッダーは実際のデータと同じサイズになります。効率を改善するために、1 バイトまたは 2 バイトのプレフィックスを付けることを提案する人もいます。これにはどんな欠点があるのだろうか?
更新:また、ガベージデータが心配な場合は、ハンドシェイクだけが本当に重要なのだろうか. Synergy のハンドシェイクは長い (数バイト) ため、4 バイトのメッセージ プレフィックスが必要ですか? 私は最近、1 バイトのハンドシェイクしか持たないプロトコルを作成しましたが、互換性のないプロトコルがシステムに不正なデータをスパム送信していたため、それは悪い考えであることが判明しました (この裏から、少なくとも長いハンドシェイクをお勧めするかもしれません)。 .