私はクライアントサーバーモデルのアプリケーションを書いています. サーバーはクライアントへのストリーム接続で非常に高速で大量のメッセージを (さまざまなサイズで) 送信します. クライアントはこれらのメッセージを予想されるメッセージサイズよりも大きなバッファで読み取ります.
while (ret = read (sd, buf, sizeof buf) > 0)
{
// decode message here
}
ここでの問題は、クライアントがそのようなバッファで複数のメッセージを読み取る可能性があることです。バッファが B でメッセージが M# であると仮定すると、次のようにメッセージを受信します。
|----B----|----B----|----B----|----B----| ....
|-M1--|-M2-|--M3-|-M4-|---M5---|--M6-| ....
これにより、メッセージのデコードが正しくなくなります。だから、私は次のようにメッセージを受け取りたいです(バッファごとに1つのメッセージのみ)
|----B----|----B----|----B----|----B----| ....
|-M1--|,,|-M2-|,,,|--M3-|,,|-M4-| .... (,,, は何もありません。書式設定のためだけです)
ストリーミング接続を使用する必要があり、メッセージ間に区切り文字を使用したくないことに注意してください