欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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核服务器,可以帮我测试下