我正在使用.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
}
因为通信是异步的,所以我可能会同时收到多条消息。这就是为什么我需要在数据流中搜索消息开始字节和消息字节结束的原因。
.NET API 中是否有一个类可以用作 StringBuffer 等缓冲区?我需要一个字节队列,我只能弹出代表一条消息的那么多字节。还是需要自定义实现?速度够快吗?我将使用 ThreadPool 来管理 2000 个 TCP 连接,这就是我关心性能的原因。
非常感谢您!