简介git
Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能、高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长链接可达14w每秒的处理量,支持10000+长链接消息处理(客户端每100毫秒发1个短消息),内存和cpu占有率偏低github
开发背景框架
好用的轮子太少,只能本身弄个了,但愿能促进.Net社区的发展异步
框架特色socket
高性能、超稳定、支持异步、资源占用很小、代码简介、清晰易懂async
使用介绍性能
server sample :测试
1.定义实体spa
public class Book { public string Name { get; set; } }
定义MessageProcessorcode
public class DefaultMessageProcessor : IMessageProcessor {
public void Init()
{
} public async Task<ResponseBase> Process(Socean.Rpc.Core.Message.FrameData frameData) {
var title = Encoding.UTF8.GetString(frameData.TitleBytes);
if (title == "/books/namechange") { var content = Encoding.UTF8.GetString(frameData.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 == "test empty return") { return new EmptyResponse(); } return new ErrorResponse((byte)ResponseCode.SERVICE_NOT_FOUND); } }
2.启动服务
var server = new RpcServer(); server.Bind(IPAddress.Any, 11111); server.Start<DefaultMessageProcessor>();
client sample:
1.定义实体
public class Book { public string Name { get; set; } }
2.执行调用
public Book ChangeBookName(Book book) { using (var rpcClient = new FastRpcClient(IPAddress.Parse("127.0.0.1"), 11111)) { var requestContent = JsonConvert.SerializeObject(book); var response = rpcClient.Query(Encoding.UTF8.GetBytes("/books/namechange"), Encoding.UTF8.GetBytes(requestContent));
var content = Encoding.UTF8.GetString(response.ContentBytes); return JsonConvert.DeserializeObject<Book>(content); } }
其余
NetworkSettings类可修改链接超时时间等参数
项目地址