我有一個網絡服務器,我切換到使用同步Begin ..來處理短命的請求,這是一個巨大的進步。 對於長期居住的人來說,創建了兩個線程,隨着客戶數量的增加,它開始成爲一個問題。異步解析非長度定界數據
通過這些連接傳輸的數據是4到40個字節的消息。 但是它們不是長度分隔的,它們的長度可以取決於消息中的部分。可悲的是,我無法改變協議。 您可以將協議看作是一種快節奏的telnet終端協議。
我尋找到的讀取和解析傳入的消息/「線」使用Stream.BeginRead,並達成了兩項憂慮:
- 其高效調用的BeginRead約3次,10字節的消息?
- 如何高效地編寫代碼這樣做
下面是一個例子。雖然信息本身不是長度的前綴,但它的一些內容可能是。
同步方式(電流)
int length = reader.ReadInt32();
byte[] buffer = reader.ReadBytes(length);
異步方法
...
//Here we have received a byte array
int length = ParseIntegerFromBuffer(buffer);
stream.BeginRead(buffer, 0, length, Part1Read, null);
}
private void Part1Read(IAsyncResult result)
{
...
異步例子不是我使用的是什麼,我已經寫了需要幾分鐘包裝注意檢查所請求字節數的成功讀取。 在編寫和理解我可以得到的書面代碼方面,這是否有效?
我的代碼必須在.NET 3.5上運行,但未來5和選項,我應該等待它,然後做異步編程?
如果我使用同步閱讀,此代碼將面向互聯網,任何掛起的傳入連接都會鎖定線程池線程。