目录

1.高性能RPC框架:Socean.RPC

2.Socean.RPC框架实测

3.Socean.Rpc之EasyProxy

简介

这几天给Socean.RPC加上了动态代理,简称EasyProxy,特点是性能高、稳定性好、使用简便

使用入门:

服务端 :

1.定义序列化器和消息处理器

public class RpcSerializer : Socean.Rpc.DynamicProxy.IRpcSerializer
{
    public object Deserialize(string content, Type type)
    {
        return Newtonsoft.Json.JsonConvert.DeserializeObject(content, type);
    }

    public string Serialize(object obj)
    {
        return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
    }
}   

public class CustomMessageProcessor : Socean.Rpc.DynamicProxy.EasyProxyMessageProcessor
{
    public override void Init(IServiceHost serviceHost)
    {
        serviceHost.RegisterServices(Assembly.GetExecutingAssembly(), new RpcSerializer());
    }
}

2.定义服务

public class Book
{
    public string Name { get; set; }

    public double Price { get; set; }
}

[RpcService]
public class BookService
{
    public bool RegisterForSale(Book book)
    {
        Console.WriteLine("RegisterForSale,bookName:{0},bookPrice:{1}", book.Name, book.Price);
        return true;
    }

    public void AddStock(string bookName, int count)
    {
        Console.WriteLine("AddStock,bookName:{0},count:{1}", bookName, count);
    }
}

3.启动服务

var server = new RpcServer();
server.Bind(IPAddress.Parse();
server.Start<CustomMessageProcessor>();

客户端:

1.定义序列化器

public class RpcSerializer : Socean.Rpc.DynamicProxy.IRpcSerializer
{
    public object Deserialize(string content, Type type)
    {
        return Newtonsoft.Json.JsonConvert.DeserializeObject(content, type);
    }

    public string Serialize(object obj)
    {
        return Newtonsoft.Json.JsonConvert.SerializeObject(obj);
    }
}

2.定义服务接口

[RpcProxy(ServiceName = "BookService")]
public interface IBookService
{
    bool RegisterForSale(Book book);

    void AddStock(string bookName, int count);
}

public class Book
{
    public string Name { get; set; }

    public double Price { get; set; }
}

3.生成代理服务

, new RpcSerializer());

4.执行函数

 bookServiceProxy.RegisterForSale(new Book { Name = "相对论", Price = 108.88 });
 bookServiceProxy.AddStock();

其他功能

想实现日志或鉴权等功能,可以使用ServiceFilter

1.定义日志记录ServiceFilter

public class LogFilter : IServiceFilter
{
    public void Do(ServiceContext context, FilterChain filterChain)
    {
        Console.WriteLine("before request");

        filterChain.DoNext(context);

        Console.WriteLine("after request");
    }
}

2.注册日志记录Filter

public class CustomMessageProcessor : Socean.Rpc.DynamicProxy.EasyProxyMessageProcessor
{
    public override void Init(IServiceHost serviceHost)
    {
        serviceHost.RegisterServices(Assembly.GetExecutingAssembly(), new RpcSerializer());

        serviceHost.RegisterFilter(new LogFilter());
    }
}

测试

简单测试了一下IBookService.AddStock方法,在我的破旧笔记本上测试,并发量大约5w/秒(压测时请注释掉AddStock内部的Console.WriteLine函数,因为此函数并发不高,会影响测试结果)

项目地址

项目地址:https://github.com/ch00486259/Socean.Rpc
 

最新文章

  1. c#泛型的使用[转]
  2. JSTL 操作符
  3. INSERT INTO 语句的语法错误【 OLE报错,office终端执行SQL没有问题】
  4. tomcat ROOT中的lib和webapp中的lib的作用
  5. 项目中用到的window.showModalDialog(来自网络)
  6. linux 防火墙打开端口/屏蔽IP等
  7. WebApi中帮助页Description的中文显示
  8. 文件和目录之utime函数
  9. hadoop 常用配置项
  10. 一个使用enum实现多态的例子
  11. 学习OpenCV第0天
  12. 深入理解C指针之三:指针和函数
  13. MVC 在控制器中获取某个视图动态的HTML代码
  14. Android + OpenCV - Finding extreme points in contours
  15. 使用@Validated分组遇到的坑
  16. mysql8.0 linux 安装
  17. 版本控制之GitHub亲手实验总结
  18. squid 快速配置
  19. python 实例属性
  20. linux结束程序内存不会马上释放的解决方法

热门文章

  1. 我的ubuntu源18和16
  2. 分享一下我在mysql5.6+mysql8数据库安装过程中的一些坑!
  3. Python3基础之数据类型(字符串和列表)
  4. CentOS7下部署2套Python版本共存
  5. ElasticSearch入门篇Ⅰ --- ES核心知识概括
  6. laravel 初学路由简单介绍
  7. Linux vi &amp; bash使用笔记
  8. Cobaltstrike指令/beacon命令大全
  9. sql serverDB运维实用sql大全
  10. sougn开源,自己写的一个项目