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