c#---Socean.Rpc之EasyProxy
2024-09-03 01:26:39
目录
简介
这几天给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
最新文章
- c#泛型的使用[转]
- JSTL 操作符
- INSERT INTO 语句的语法错误【 OLE报错,office终端执行SQL没有问题】
- tomcat ROOT中的lib和webapp中的lib的作用
- 项目中用到的window.showModalDialog(来自网络)
- linux 防火墙打开端口/屏蔽IP等
- WebApi中帮助页Description的中文显示
- 文件和目录之utime函数
- hadoop 常用配置项
- 一个使用enum实现多态的例子
- 学习OpenCV第0天
- 深入理解C指针之三:指针和函数
- MVC 在控制器中获取某个视图动态的HTML代码
- Android + OpenCV - Finding extreme points in contours
- 使用@Validated分组遇到的坑
- mysql8.0 linux 安装
- 版本控制之GitHub亲手实验总结
- squid 快速配置
- python 实例属性
- linux结束程序内存不会马上释放的解决方法