2

接続されたソケットごとに 1 つのスレッドを使用することを避けるために、ソケットで BeginReceive/EndReceive を使用できるように、常に独自のシリアライザー/デシリアライザーを構築してきました。かなり時間のかかる作業です。

私は protobuf-net を調べ始めましたが、シリアライゼーション/デシリアライゼーションを自分で書かなくても非同期ソケットで使用したいと考えています。ブロッキング操作をラップするために、ソケットごとに 1 つのスレッドを使用する必要がない方がよいと思います。

クイックスタートを見ると、まさにそれを行っています (クライアントごとに 1 つのスレッド)。他に方法はありませんか?

私の質問は、protobuf-net に関するものではなく、シリアライゼーションとソケット全般に関するものです。しかし、protobuf-net の例は大歓迎です。

4

1 に答える 1

1

これは基本的な例です。protobuf-netはシリアル化レイヤーであり、メッセージングレイヤーではありません。メッセージングを処理したい特定の方法がある場合は、それを選択してください。あなたがする必要があるのは、あなたのストリーム処理の間に、メッセージ全体を(おそらくにMemoryStream)バッファリングし、そしてデータが利用可能になったときにprotobuf-netを介してそれを処理することです。

違いは、メソッドを直接使用する代わりに、*WithLengthPrefixペイロードの長さを個別に処理して、コードが処理前にバッファリングするデータの量を認識できるようにすることです。

于 2010-07-09T13:24:00.977 に答える