RRQMSocket是一個整合性的、超輕量級的網路通訊服務架構。它具有高並發連接、高並發處理、事件訂閱、插件擴充、多執行緒處理、記憶體池、物件池等特點,讓使用者能夠更簡單的、快速的搭建網路框架。在發送效率上,同步發送可達20w/s,非同步發送可達60w/s。伺服器在接收、處理效率上因執行緒數量而定。
支持環境:
.NETFramework4.5及以上。
.NETCore3.1及以上。
.NETStandard2.0以上。
支援框架:
WPF
Winform
Blazor
Xamarin
Mono
Unity
其他(即所有C#系)
特點:
1、對像池
物件池在RRQMSocket有許多應用,最主要的兩個就是連接物件池和處理物件池。連線物件池就是當客戶端成功連線時,首先會去連線物件池中找TcpSocketClient,然後沒有的話,才會建立。如果哪個客戶端斷線了,它的TcpSocketClient就會回收。這也就是ID重用的原因。
然後就是處理物件池,在RRQMSocket中,接收資料的線程和IOCP內核線程是分開的,也就是說客戶端給伺服器發送了1w條數據,但是伺服器收到後處理起來很慢,那傳統的iocp肯定會放慢接收速率,然後通知客戶端的tcp窗口,發生擁塞,然後讓客戶端暫緩發送。但是在RRQMSocket中會把收到的資料通過隊列全都存起來,首先不影響iocp的接收,同時再分配線程去處理收到的報文信息,這樣就相當於一個“洩洪湖泊”,能很大程度的提高處理資料的能力。
2、多執行緒
由於有處理對像池的存在,使多執行緒處理變得簡單。在客戶端連線完成時,會自動指派該客戶端輔助類別(TcpSocketClient)的訊息處理邏輯線程,假如伺服器執行緒數量為10,則第一個連線的客戶端會被指派到0號執行緒中,第二個連接將被分配到1號線程中,以此類推,循環分配。當某個客戶端收到資料時,會將資料排入目前執行緒所獨自擁有的佇列當中,並喚醒執行緒執行。
3.傳統IOCP和RRQMSocket
RRQMSocket的IOCP和傳統也不一樣的,以微軟官方為例,使用MemoryBuffer開闢一塊內存,然後均分,然後給每個會話分配一個區接收,等收到數據以後,再復制一份,然後把復制的數據拋出處理。而RRQMSocket是每次接收之前,從內存池拿一個可用內存塊,然後直接用於接收,等收到數據以後,直接就把這個內存塊拋出去了,這樣就避免了複製操作,雖然只是細小的設計,但在傳輸1000w次64kb的資料時,效能相差了10倍。所以也是基於此,檔案傳輸時效率才會高。
4.資料處理適配器
相信大家都使用過其他的Socket產品,例如HPSocket,SuperSocket等,那麼RRQMSocket在設計時也是藉鑑了其他產品的優秀設計理念,數據處理適配器就是其中之一,但和其他產品的設計不同的是,RRQMSocket的適配器功能更加強大,它可以無視真實的數據,而模擬出想要的數據,例如:可以對數據進行預處理,從而解決數據分包。黏包的問題,也可以直接解析HTTP協議,經過適配器處理後傳回一個HttpRequest物件等。
5、黏包、分包解決
在RRQMSocket中處理TCP黏包、分包問題是非常簡單的。只需要更改不同的資料處理適配器即可。例如:使用固定包頭,只需要給TcpSocketClient和TcpClient賦值FixedHeaderDataHandlingAdapter的實例即可。同樣對應的處理器也有固定長度、終止字元分割等。