当前位置: 移动技术网 > IT编程>开发语言>c# > C# -- 高性能RPC框架:Socean.RPC

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

2019年08月22日  | 移动技术网IT编程  | 我要评论
简介 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核服务器,可以帮我测试下

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网