C# -- 高性能RPC框架:Socean.RPC
简介
Socean.RPC是一个.Net下的高性能RPC框架,框架以高性能、高稳定性为目标,底层基于socket,无第三方库引用,代码简洁,总代码量大约在2000行,框架性能较高,在普通PC上测试,长连接可达14w每秒的处理量,支持10000+长连接消息处理(客户端每100毫秒发1个短消息),内存和cpu占有率偏低
开发背景
好用的轮子太少,只能自己弄个了,希望能促进.Net社区的发展
框架特点
高性能、超稳定、支持异步、资源占用很小、代码简介、清晰易懂
使用介绍
server sample :
1.定义实体
public class Book
{
public string Name { get; set; }
}
定义MessageProcessor
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, ); 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
C# -- 高性能RPC框架:Socean.RPC的更多相关文章
- 开源自己实现一个.net rpc框架 - Machete.Rpc
Machete.Rpc Machete.Rpc 是一个轻量级的Rpc(远程过程调用的)框架.底层代理使用了Emit提高了效率,底层通信采用DotNetty框架以提升通信的效率.目前正在逐步完善中. G ...
- c#---Socean.RPC框架实测[并发量13w][响应时间0.04ms]
目录1.高性能RPC框架:Socean.RPC 前言 经过一段时间的优化,Socean.RPC的性能又提高了一些,不过这差不多是socketAPM模型的极限了.本框架仅仅2000多行代码,无第三方框架 ...
- c#---Socean.Rpc之EasyProxy
目录 1.高性能RPC框架:Socean.RPC 2.Socean.RPC框架实测 3.Socean.Rpc之EasyProxy 简介 这几天给Socean.RPC加上了动态代理,简称EasyProx ...
- 这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
作者:冰河 博客地址:https://binghe001.github.io 大家好,我是冰河~~ 没错,这次冰河又要搞事情了,这次准备下手的是RPC框架项目.为什么要对RPC框架项目下手呢,因为在如 ...
- 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
转自: http://blog.csdn.net/liubenlong007/article/details/54692241 概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺 ...
- dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
概述 前段时间项目要做服务化,所以我比较了现在流行的几大RPC框架的优缺点以及使用场景,最终结合本身项目的实际情况选择了使用dubbox作为rpc基础服务框架.下面就简单介绍一下RPC框架技术选型的过 ...
- 高并发架构系列:如何从0到1设计一个类Dubbo的RPC框架
在过去持续分享的几十期阿里Java面试题中,几乎每次都会问到Dubbo相关问题,比如:“如何从0到1设计一个Dubbo的RPC框架”,这个问题主要考察以下几个方面: 你对RPC框架的底层原理掌握程度. ...
- Hadoop系列番外篇之一文搞懂Hadoop RPC框架及细节实现
@ 目录 Hadoop RPC 框架解析 1.Hadoop RPC框架概述 1.1 RPC框架特点 1.2 Hadoop RPC框架 2.Java基础知识回顾 2.1 Java反射机制与动态代理 2. ...
- 如何从0到1设计一个类Dubbo的RPC框架
之前分享了如何从0到1设计一个MQ消息队列,今天谈谈"如何从0到1设计一个Dubbo的RPC框架",重点考验: 你对RPC框架的底层原理掌握程度. 以及考验你的整体RPC框架系统设 ...
随机推荐
- Sql Server 2008 R2安装教程
作者:骄阳似火_2018 来源:CSDN 原文:https://blog.csdn.net/weixin_42773514/article/details/87008537 版权声明:本文为博主原创文 ...
- Spring Boot打war包和jar包的目录结构简单讲解
Spring Boot项目可以制作成jar包和war包,其目录结构是不一样的,具体的如下所示: 1.war包目录结构分析WAR(Web Archivefile)网络应用程序文件,是与平台无关的文件格式 ...
- VUE 动态加载组件的四种方式
动态加载组件的四种方式: 1.使用import导入组件,可以获取到组件 var name = 'system'; var myComponent =() => import('../compon ...
- JPA连接PG数据库时间类型查询报错的修改
PG数据库中的时间格式规范: https://blog.csdn.net/sky_limitless/article/details/79527665 to_data 转换为 普通的时间格式 to_t ...
- SQLite R*Tree 模块测试
目录 SQLite R*Tree 模块测试 1.SQLite R*Tree 模块特性简介 2.SQLite R*Tree 模块简单测试代码 SQLite R*Tree 模块测试 相关参考: MySQL ...
- LocalDate/LocalDateTime/LocalTime与Date的互转
// 01. java.util.Date --> java.time.LocalDateTime public void UDateToLocalDateTime() { java.util. ...
- Java基础 awt Frame 点击叉后,在控制台输出提示信息并关闭程序
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- Annotation-based argument resolution 部分2
HandlerMethodArgumentResolver的抽象實現AbstractNamedValueMethodArgumentResolver下的子类 部分1 RequestParamMapM ...
- angular的路由例子
app.routing.module.ts里面,关键部分 const routes: Routes = [ { path: '', redirectTo : 'c3/c2/mmc', pathMatc ...
- linux安装jira
JIRA配置本地MYSQL数据库 https://blog.csdn.net/coin_one/article/details/78376238 jira7.3.6 linux安装及破解 https: ...