合抱之木,生于毫末;九层之台,起于垒土。
💿描述
🖥支持环境
- .NET Framework4.5及以上。
- .NET Core3.1及以上。
- .NET Standard2.0及以上。
🥪支持框架
- WPF
- Winform
- Blazor
- Xamarin
- Mono
- Unity
- 其他(即所有C#系)
🌴RRQMSocket特点速览
对象池
对象池在RRQMSocket有很多应用,最主要的两个就是连接对象池和处理对象池。连接对象池就是当客户端成功连接时,首先会去连接对象池中找SocketClient,然后没有的话,才会创建。如果哪个客户端掉线了,它的SocketClient就会被回收。
然后就是处理对象池,在RRQMSocket中,接收数据的线程和IOCP内核线程是分开的(也可以设置拥塞接收),也就是比如说客户端给服务器发送了1w条数据,但是服务器收到后处理起来很慢,那传统的iocp肯定会放慢接收速率,然后通知客户端的tcp窗口,发生拥塞,然后让客户端暂缓发送。但是在RRQMSocket中会把收到的数据通过队列全都存起来,首先不影响iocp的接收,同时再分配线程去处理收到的报文信息,这样就相当于一个“泄洪湖泊”,能很大程度的提高处理数据的能力。
多线程
由于有处理对象池的存在,使多线程处理变得简单。在客户端连接完成时,会自动分配该客户端辅助类(TcpSocketClient)的消息处理逻辑线程,假如服务器线程数量为10,则第一个连接的客户端会被分配到0号线程中,第二个连接将被分配到1号线程中,以此类推,循环分配。当某个客户端收到数据时,会将数据排入当前线程所独自拥有的队列当中,并唤醒线程执行。
传统IOCP和RRQMSocket
RRQMSocket的IOCP和传统也不一样,就以微软官方示例为例,使用MemoryBuffer开辟一块内存,均分,然后给每个会话分配一个区接收,等收到数据后,再复制源数据,然后把复制的数据进行处理。而RRQMSocket是每次接收之前,从内存池拿一个可用内存块,然后直接用于接收,等收到数据以后,直接就把这个内存块抛出处理,这样就避免了复制操作,虽然只是细小的设计,但是在传输1000w次64kb的数据时,性能相差了10倍。
数据处理适配器
相信大家都使用过其他的Socket产品,例如HPSocket,SuperSocket等,那么RRQMSocket在设计时也是借鉴了其他产品的优秀设计理念,数据处理适配器就是其中之一,但和其他产品的设计不同的是,RRQMSocket的适配器功能更加强大,它不仅可以提前解析数据包,还可以解析数据对象。例如:可以使用固定包头对数据进行预处理,从而解决数据分包、粘包的问题。也可以直接解析HTTP协议,经过适配器处理后传回一个HttpRequest对象等。
粘包、分包解决
在RRQMSocket中处理TCP粘包、分包问题是非常简单的。只需要更改不同的数据处理适配器即可。例如:使用固定包头,只需要给SocketClient和TcpClient配置注入FixedHeaderDataHandlingAdapter的实例即可。同样对应的处理器也有固定长度 、 终止字符分割 等。
兼容性与适配
RRQMSocket提供多种框架模型,能够完全兼容基于TCP、UDP协议的所有协议。例如:TcpService与TcpClient,其基础功能和Socket一模一样,只是增强了框架的坚固性和并发性,将连接和接收数据通过事件的形式抛出,让使用者能够更加友好的使用。
其次,RRQMSocket也提供了一些特定的服务器和客户端,如TokenService和TokenClient,这两个就必须配套使用,不然在验证Token时会被主动断开。
🔗联系作者
🍻RRQM系产品
| 名称 | 版本(Nuget Version) | 下载(Nuget Download) | 描述 |
|---|---|---|---|
| RRQMCore | RRQMCore是为RRQM系提供基础服务功能的库,其中包含:内存池、对象池、等待逻辑池、AppMessenger、3DES加密、Xml快速存储、运行时间测量器、文件快捷操作、高性能序列化器、规范日志接口等。 | ||
| RRQMMVVM | RRQMMVVM是超轻简的MVVM框架,但是麻雀虽小,五脏俱全。 | ||
| RRQMSkin | RRQMSkin是WPF的控件样式库,其中包含: 无边框窗体 、 圆角窗体 、 水波纹按钮 、 输入提示筛选框 、 控件拖动效果 、圆角图片框、 弧形文字 、 扇形元素 、 指针元素 、 饼图 、 时钟 、 速度表盘 等。 |
一、TCP框架
1.1 说明
TCP框架是RRQMSocket最基础的框架,它定制了后继成员的创建、管理,维护、使用等一系列的规则,让使用者无需关心连接、掉线、失活检测、多线程安全等问题,能够专注于数据处理。
1.2 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket
1.3 特点
- 简单易用。
- 多线程。
- 多地址监听(可以一次性监听多个IP及端口)
- 适配器预处理,一键式解决分包、粘包、对象解析(如HTTP,Json)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于事件驱动,让每一步操作尽在掌握。
- 高性能(服务器每秒可接收200w条信息)
- 独立线程内存池(每个线程拥有自己的内存池)
1.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 物联网数据采集服务器。
- 游戏服务器开发。
1.5 API文档
1.6 Demo
二、Token框架
2.1 说明
TokenService框架是RRQMSocket提供的派生自TcpService的基础框架,它在TCP基础之上,通过验证Token的方式,可以规范、筛选连接者。这样可以很大程度的保护服务器不疲于非法连接者的攻击。
2.2 安装
工具➨Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket
2.3 特点
- 规范、筛选连接者,保护服务器。
- 客户端与服务器必须配套使用。
2.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 游戏服务器开发。
2.5 API文档
2.6 Demo
三、Protocol框架
3.1 说明
ProtocolService框架是RRQMSocket提供的派生自TokenService的基础框架,它在Token基础之上,提供协议+数据的形式发送,其中还包括协议冲突检测、协议数据占位等。
3.2 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket
3.3 特点
- 支持ID同步。
- 快捷协议发送。
3.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 游戏服务器开发。
3.5 API文档
3.6 Demo
四、RPCService框架
4.1 说明
RPCService框架是所有远程过程调用的微服务调用管理平台,在该平台的托管下,使多种协议、多种序列化方式调用成为可能。目前可使用RRQMRPC、WebApi、XmlRpc、JsonRpc共同调用。
4.2 RPC解析器
说明: RPCService仅仅是对调用的服务进行管理和维护,并不参与实质性的通信过程。实际上由于通信协议、序列化方式的不同,需要创建相对应的解析器才能完成调用操作。
4.3 RPC解析器之RRQMRPC
4.3.1 说明
RRQMRPC是基于Protocol框架、固定包头解析的远程调用框架,也是RRQM中性能最强悍、使用最简单、功能最强大的RPC框架。
4.3.2 特点
- 支持自定义类型参数。
- 支持具有默认值的参数设定。
- 支持out、ref 关键字参数。
- 支持服务器回调客户端 。
- 支持客户端之间相互调用。
- 支持TCP、UDP等不同的协议调用相同服务。
- 支持异步调用。
- 支持权限管理,让非法调用死在萌芽时期。
- 支持静态织入调用,静态编译调用,也支持方法名+参数调用。
- 支持调用配置(类似MQTT的AtMostOnce,AtLeastOnce,ExactlyOnce)。
- 支持EventBus(企业版支持)。
- 支持自定义序列化。
- 全异常反馈 ,服务器调用状态会完整的反馈到客户端(可以设置不反馈)。
- 高性能,在保证送达但不返回的情况下,10w次调用用时0.8s,在返回的情况下,用时3.9s。
4.3.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket.RPC
4.3.4 RRQMRPC性能测试
说明:
图一、图二、图三分别为UDP无反馈调用、TCP有反馈调用、TCP连接池有反馈调用。调用次数均为10w次,调用性能非常nice。在无反馈中,吞吐量达14.28w,在有反馈中达2.72w。
4.4 RPC解析器之WebApi
4.4.1 说明
使用WebApi解析器,就可以在RPCService中通过WebApi的调用方式直接调用服务。
4.4.2 特点
- 高性能,100个客户端,10w次调用,仅用时17s。
- 全异常反馈 。
- 支持大部分路由规则。
- 支持js、Android等调用。
4.4.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket.RPC.WebApi
4.5 RPC解析器之XmlRpc
4.5.1 说明
使用XmlRpc解析器,就可以在RPCService中通过XmlRpc的调用方式直接调用服务,客户端可以使用CookComputing.XmlRpcV2进行对接。
4.5.2 特点
- 异常反馈 。
- 支持自定义类型。
- 支持类型嵌套。
- 支持Array及自定义Array嵌套。
- 支持js、Android等调用。
4.5.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket.RPC.XmlRpc
4.6 RPC解析器之JsonRpc
4.6.1 说明
使用JsonRpc解析器,就可以在RPCService中通过Json字符串直接调用服务。
4.6.2 特点
- 异常反馈 。
- 支持自定义类型。
- 支持类型嵌套。
- 支持js、Android等调用。
4.6.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket.RPC.JsonRpc
4.7 API文档
4.8 Demo
五、文件传输框架
5.1 说明
RRQMSocket.FileTransfer是一个高性能的文件传输框架,由于它派生自RRQMRPC,所以也具备RPC的全部特性。
5.2 特点
- 简单易用。
- 多线程处理。
- 高性能,传输速度可达500Mb/s。
- 超简单的传输限速设置,1k-10Gb 无级调节。
- 超简单的传输速度、传输进度获取。
- 随心所欲的暂停、继续、停止传输。
- 系统化的权限管理,让敏感文件只允许私有化下载。
- RPC交互,让客户端和服务器交流不延迟。
- 基于事件驱动,让每一步操作尽在掌握。
- 可视化的文件块流,可以实现像迅雷一样的填充式进度条。
- 超简单的断点续传设置,为大文件传输保驾护航。
- 无状态上传断点续传设置,让同一个文件,在不同客户端之间接力上传。
- 断网续传(企业版支持)
- 已经上传的文件,再次上传时,可实现快速上传。
- 极少的GC释放。
5.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
Install-Package RRQMSocket.FileTransfer
5.4 Demo示例
Demo位置: RRQMBox
5.5 性能测试
说明: 可以看到,图一正在上传一个Window的系统镜像文件,大约4.2Gb,传输速度已达到346Mb/s,这是因为服务器和客户端在同一电脑上,磁盘性能限制导致的。其次,GC基本上没有释放,性能非常强悍,图二是下载文件,性能依旧非常强悍。
致谢
谢谢大家对我的支持,如果还有其他问题,请加群QQ:234762506讨论。
💕 支持本项目
您的支持就是我不懈努力的动力。
爱心赞助名单(以下排名只按照打赏时间顺序)
- Bobo Joker(200¥)
- UnitySir(66¥)
- Coffee(100¥)
- Ninety(50¥)
- *琼(100¥)
- **安(5¥)
商业采购名单(以下排名只按照商业采购时间顺序)
1.凯斯得****有限公司






