簡介 Socean.RPC是一個.Net下的高性能RPC框架,框架以高性能、高穩定性為目標,底層基於socket,代碼簡潔,總代碼量大約在2000行,無第三方庫引用,框架性能較高,在雙核i5筆記本上可達10w+每秒的處理量,支持10000長連接消息發送(每秒發10個短消息),均穩定運行,記憶體和cpu ...
簡介
Socean.RPC是一個.Net下的高性能RPC框架,框架以高性能、高穩定性為目標,底層基於socket,無第三方庫引用,代碼簡潔,總代碼量大約在2000行,框架性能較高,在雙核i5筆記本上可達10w+每秒的處理量,支持10000+長連接消息處理(客戶端每100毫秒發1個短消息),記憶體和cpu占有率偏低
開發背景
好用的輪子太少,只能自己弄個了,希望能促進.Net社區的發展
使用介紹
server sample :
1.定義實體
public class Book { public string Name { get; set; } }
定義MessageProcessor
public class DefaultMessageProcessor : IMessageProcessor { public ResponseBase Process(string title, byte[] contentBytes) { if (title == "book/name/change") { var content = Encoding.UTF8.GetString(contentBytes); //here we use newtonsoft.Json serializer //you need add refer "newtonsoft.Json.dll" var book = JsonConvert.DeserializeObject<Book>(content); book.Name = "new name"; var responseContent = JsonConvert.SerializeObject(book); return new BytesResponse(Encoding.UTF8.GetBytes(responseContent)); } if (title == "empty") { return new EmptyResponse(); } return new ErrorResponse(ResponseErrorCode.SERVICE_NOT_FOUND); } }
2.啟動服務
var server = new KeepAliveRpcServer(); server.Bind(IPAddress.Any, 11111); server.AutoReconnect = true; server.MessageProcessor = new DefaultMessageProcessor(); server.Start();
client sample:
1.定義實體
public class Book { public string Name { get; set; } }
2.執行調用
public Book ChangeBookName(Book book) { using (var rpcClient = ShortConnectionRpcClientFactory.Create(IPAddress.Parse("127.0.0.1"), 11111)) { var requestContent = JsonConvert.SerializeObject(book); var response = rpcClient.Query("book/name/change", Encoding.UTF8.GetBytes(requestContent)); var content = Encoding.UTF8.GetString(response.ContentBytes); return JsonConvert.DeserializeObject<Book>(content); } }
其他
NetworkSettings類可修改連接超時時間等參數
在某些低響應時間的場景需求下,可以將NetworkSettings.ClientDetectReceiveInterval設置成0,但線程不能多,否則會占滿CPU
server端的最高併發處理量應該在30w以上,誰要是有30核伺服器,可以幫我測試下(其實20核也行)
項目地址
https://github.com/ch00486259/Socean.Rpc
性能測試建議(load test):
壓力測試時客戶端需將NetworkSettings.ClientDetectReceiveInterval設置成1,可提高客戶端的收發效率
提升線程優先順序至ThreadPriority.Highest
客戶端併發線程數最好是100至200之間
壓力測試的客戶端最好用win7系統,因為win7的時間片精度有時能達到1ms
最好是多機測試