c# TCP高性能通信
開篇都是吹牛逼哈。。。
我原本打算使用dotnetty來解決傳輸問題,但是試了下沒有成功,也沒有找到相關(guān)問題解決方法,導(dǎo)出源碼,好大啊。暫時不想研究,而且是.Net Core的。最后沒有辦法,就自己封裝了。我就不上代碼了,已經(jīng)傳到GIT上面了,和其它項目。
我主要介紹過程原理,;
1.ISocketChannel接口,繼承實現(xiàn)通信,繼承類封裝Socket.
2.外層封裝ServerSocketChannel,仿造dotnetty服務(wù)端,設(shè)置socket參數(shù),接收線程數(shù),設(shè)置數(shù)據(jù)的解析類及打包的類以及數(shù)據(jù)接收類。
具體ServerSocketChannel:
里面定義了一個ServerSocketTask,啟動接收連接,采用SocketAsyncEventArgs 接收連接,用一個緩沖池保持對象,每接收一個就再次接收一個;
接收連接后,放入到一個集合中,然后由啟動的多個接收線程抽取數(shù)據(jù),監(jiān)測是否有數(shù)據(jù)讀取,有就讀取,沒有就休眠一下,接收采用緩沖buffer,主要是解決多包數(shù)據(jù)問題,接收完整一包后還是要合并一個byte[],然后再次傳入給設(shè)置的接收類中。
3.SocketChannel是解決客戶端,客戶端直接采用SocketAsyncEventArgs接收,不用再使用其它方法,畢竟客戶端再同一臺機器不可能成百上千,直接由底層線程池接收就可以了。c#的線程池有自己的算法,會動態(tài)維護。不用再麻煩處理了。當然我實現(xiàn)了手動控制線程,啟動多個線程去接收數(shù)據(jù)。
項目地址:https://github.com/jinyuttt/StremCloud.git
其中解決方案下的NetHighSocket項目就是通信實現(xiàn),但是還需要項目SrvNetSocket,通信接口庫,為啥會有這個庫,我后面博文會簡單說的。
轉(zhuǎn)載于:https://www.cnblogs.com/jinyu20180311/p/9788576.html
總結(jié)
以上是生活随笔為你收集整理的c# TCP高性能通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python - classs内置方法
- 下一篇: C#中结构体定义并转换字节数组