C# -- 高性能RPC框架:Socean.RPC
程序员文章站
2023-10-24 19:58:10
简介 Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能、高稳定性为目标,底层基于socket,代码简洁,总代码量大约在2000行,无第三方库引用,框架性能较高,在双核i5笔记本上可达10w+每秒的处理量,支持10000长连接消息发送(每秒发10个短消息),均稳定运行,内存和cpu ......
简介
socean.rpc是一个.net下的高性能rpc框架,框架以高性能、高稳定性为目标,底层基于socket,代码简洁,总代码量大约在2000行,无第三方库引用,框架性能较高,在双核i5笔记本上可达10w+每秒的处理量,支持10000长连接消息发送(每秒发10个短消息),均稳定运行,内存和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类可修改连接超时时间等参数
若果要进行性能测试(load test),最好是在客户端把networksettings.clientdetectreceiveinterval设置成1,并提升线程优先级至threadpriority.highest
项目地址
https://github.com/ch00486259/socean.rpc
最高并发处理量应该在30w以上,谁要是有40核服务器,可以帮我测试下
上一篇: 喜欢小动物,所以不去打野
下一篇: python模糊图片过滤的方法