我在C#中創建了一個服務器,並試圖高效地處理來自客戶端的數據。我現在有一個客戶端線程檢查客戶端分組此代碼:高效的數據包處理?
if (myStream.DataAvailable == true && myStream.CanRead) {
int mySize = myStream.ReadByte();
myBuffer = new byte[ mySize ];
await myStream.ReadAsync(myBuffer, 0, mySize);
ushort myPeek = 0;
Net_Messages.Net_Read(myStream, myID, myBuffer, myPeek, myThreading);
}
所以我的問題是,是否有效地從數據流中的數據存儲到從每個客戶端收到的每個數據包緩衝區?我應該有一個固定的預定義緩衝區,而不是爲每個數據包檢索創建一個新緩衝區?
我該怎樣寫數據呢?爲每個客戶端創建一個固定的預定義緩衝區,將數據存儲在該緩衝區併發送緩衝區?
我與預先定義的緩衝區問題是分配是不需要通過創建一個不必要的大小的緩衝區,如果我能在正確的大小爲每個數據包的新緩衝區額外的內存。
注:Net_Read是一個簡單的穿過函數經過緩衝,並根據需要處理接收到的分組額外的信息。
有道理,謝謝你的信息。 :)另外,我不相信我有訪問與TcpListener類的套接字輪詢。 – FatalSleep
@FatalSleep我不知道:我只使用Socket類。抽象增加很少,並帶走很多。 –
它不像套接字那樣高效,並且缺少一些功能,但它更容易實現。如果你碰巧有一個基於套接字的教程,而不是TcpClient,但我是所有人。 – FatalSleep