独自のバイナリ プロトコルを介してデータを転送するために、 .NET Socket クラスを使用しています。通信全体は非同期です。
socket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
new AsyncCallback(ReadCallback), state);
[...]
public static void ReadCallback(IAsyncResult ar) {
StateObject so = (StateObject)ar.AsyncState;
Socket s = so.workSocket; // my socket
int rxBytesCnt = s.EndReceive(ar); // number of Bytes received
so.buffer ... // processing data
}
通信は非同期であるため、同時に複数のメッセージを受け取ることがあります。そのため、メッセージの開始バイトとメッセージの終了バイトをデータストリームで検索する必要があります。
StringBuffer などのバッファとして使用できる .NET API のクラスはありますか? 1 つのメッセージを表すバイト数だけポップできるバイトのキューが必要です。または、カスタム実装が必要ですか? それは十分に速いですか?ThreadPool を使用して 2000 の TCP 接続を管理します。そのため、パフォーマンスが心配です。
事前にどうもありがとうございました!