C# -- 高性能RPC框架:Socean.RPC

简介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类可修改链接超时时间等参数

 

项目地址

https://github.com/ch00486259/Socean.Rpc

相关文章
相关标签/搜索