# RRQMSocket
**Repository Path**: javamx/RRQMSocket
## Basic Information
- **Project Name**: RRQMSocket
- **Description**: 【RRQMSocket 5.0】是一个轻量级网络通信框架,其特点是多兼容、广适配、高并发。其中主要内容包括:TCP、UDP服务通信框架、大文件传输、RPC、WebApi、XmlRpc、JsonRpc等内容
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/RRQM_OS
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 805
- **Created**: 2021-09-06
- **Last Updated**: 2021-09-06
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://www.nuget.org/packages/RRQMSocket/)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
[](https://www.nuget.org/packages/RRQMSocket/)
[](https://gitee.com/dotnetchina/RRQMSocket/stargazers)
[](https://gitee.com/dotnetchina/RRQMSocket/members)
合抱之木,生于毫末;九层之台,起于垒土。
## 💿描述
| 名称 |描述|
|---|---|
|[](https://www.nuget.org/packages/RRQMSocket/)| **RRQMSocket**是一个整合性的、超轻量级的、可以免费商用使用的网络通信服务框架。
它具有 **高并发连接** 、 **高并发处理** 、 **事件订阅** 、 **插件式扩展** 、
**多线程处理** 、 **内存池** 、 **对象池** 等特点,
让使用者能够更加简单的、快速的搭建网络框架。|
|[](https://www.nuget.org/packages/RRQMSocketFramework/)| **RRQMSocketFramework**是RRQMSocket系列的企业版,
两者在功能上几乎没有区别,但是RRQMSocketFramework无任何依赖,
且可以提供专属的定制功能。后续也会加入企业已定制的优秀功能,希望大家多多支持。|
| [](https://www.nuget.org/packages/RRQMSocket.FileTransfer/) | RRQMSocket.FileTransfer是一个高性能的文件传输框架,
您可以用它传输**任意大小**的文件,它可以完美支持**上传下载混合式队列传输**、
**断点续传**、 **快速上传** 、**传输限速**、**获取文件信息**、**删除文件**等。
在实时测试中,它的传输速率可达1000Mb/s。 |
|[](https://www.nuget.org/packages/RRQMSocket.RPC/) |RPC是一个超轻量、高性能、可扩展的微服务管理平台框架,
目前已完成开发**RRQMRPC**、**XmlRpc**、**JsonRpc**、**WebApi**部分。
**RRQMRPC**部分使用RRQM专属协议,支持客户端**异步调用**,
服务端**异步触发**、以及**out**和**ref**关键字,**函数回调**等。
在调用效率上也是非常强悍,在调用空载函数,且返回状态时,
**10w**次调用仅用时**3.8**秒,不返回状态用时**0.9**秒。
其他协议调用性能详看性能评测。|
|[](https://www.nuget.org/packages/RRQMSocket.RPC.WebApi/)| WebApi是一个扩展于RRQMSocket.RPC的WebApi组件,
可以通过该组件创建WebApi服务解析器,让桌面端、Web端、移动端可以跨语言调用RPC函数。
功能支持路由、Get传参、Post传参等。|
|[](https://www.nuget.org/packages/RRQMSocket.RPC.XmlRpc/)| XmlRpc是一个扩展于RRQMSocket.RPC的XmlRpc组件,
可以通过该组件创建XmlRpc服务解析器,完美支持XmlRpc数据类型,类型嵌套,
Array等,也能与CookComputing.XmlRpcV2完美对接。不限Web,Android等平台。|
| [](https://www.nuget.org/packages/RRQMSocket.RPC.JsonRpc/)| JsonRpc是一个扩展于RRQMSocket.RPC的JsonRpc组件,
可以通过该组件创建JsonRpc服务解析器,支持JsonRpc全部功能,可与Web,Android等平台无缝对接。|
| [](https://www.nuget.org/packages/RRQMSocket.Http/) | RRQMSocket.Http是一个能够简单解析Http的服务组件,
能够快速响应Http服务请求。|
## 🖥支持环境
- .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时会被主动断开。
## 🔗联系作者
- [CSDN博客主页](https://blog.csdn.net/qq_40374647)
- [哔哩哔哩视频](https://space.bilibili.com/94253567)
- [源代码仓库主页](https://gitee.com/RRQM_Home)
- 交流QQ群:234762506
## 🍻RRQM系产品
| 名称| 版本(Nuget Version)|下载(Nuget Download)| 描述 |
|------|----------|-------------|-------|
| [RRQMCore](https://gitee.com/RRQM_OS/RRQMCore) | [](https://www.nuget.org/packages/RRQMCore/) | [](https://www.nuget.org/packages/RRQMCore/) | RRQMCore是为RRQM系提供基础服务功能的库,其中包含:**内存池**、**对象池**、**等待逻辑池**、**AppMessenger**、**3DES加密**、**Xml快速存储**、**运行时间测量器**、**文件快捷操作**、**高性能序列化器**、**规范日志接口**等。 |
| [RRQMSkin](https://gitee.com/RRQM_OS/RRQMSkin) | [](https://www.nuget.org/packages/RRQMSkin/) | [](https://www.nuget.org/packages/RRQMSkin/) | RRQMSkin是WPF的控件样式库,其中包含: **无边框窗体** 、 **圆角窗体** 、 **水波纹按钮** 、 **输入提示筛选框** 、 **控件拖动效果** 、**圆角图片框**、 **弧形文字** 、 **扇形元素** 、 **指针元素** 、 **饼图** 、 **时钟** 、 **速度表盘** 等。|
## 一、TCP框架
#### 1.1 说明
TCP框架是RRQMSocket最基础的框架,它定制了后继成员的创建、管理,维护、使用等一系列的规则,让使用者无需关心连接、掉线、失活检测、多线程安全等问题,能够专注于数据处理。
#### 1.2 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket
```
#### 1.3 特点
- 简单易用。
- 多线程。
- **多地址监听**(可以一次性监听多个IP及端口)
- 适配器预处理,一键式解决**分包**、**粘包**、对象解析(如HTTP,Json)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于事件驱动,让每一步操作尽在掌握。
- 高性能(服务器每秒可接收200w条信息)
- **独立线程内存池**(每个线程拥有自己的内存池)
#### 1.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 物联网数据采集服务器。
- 游戏服务器开发。
#### 1.5 API文档
[RRQMSocket API文档](https://gitee.com/RRQM_OS/RRQM/wikis/pages?sort_id=3984527&doc_id=1402901)
#### 1.6 Demo
[RRQMBox](https://gitee.com/RRQM_OS/RRQMBox)
## 二、Token框架
#### 2.1 说明
TokenService框架是RRQMSocket提供的派生自TcpService的基础框架,它在TCP基础之上,通过验证Token的方式,可以规范、筛选连接者。这样可以很大程度的**保护服务器**不疲于非法连接者的攻击。
#### 2.2 安装
工具➨Nuegt包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket
```
#### 2.3 特点
- **规范**、**筛选**连接者,保护服务器。
- 客户端与服务器必须**配套**使用。
#### 2.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 游戏服务器开发。
#### 2.5 API文档
[RRQMSocket API文档](https://gitee.com/RRQM_OS/RRQM/wikis/pages?sort_id=3984517&doc_id=1402901)
#### 2.6 Demo
[RRQMBox](https://gitee.com/RRQM_OS/RRQMBox)
## 三、Protocol框架
#### 3.1 说明
ProtocolService框架是RRQMSocket提供的派生自TokenService的基础框架,它在Token基础之上,提供**协议+数据**的形式发送,其中还包括**协议冲突检测**、**协议数据占位**等。
#### 3.2 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket
```
#### 3.3 特点
- 支持**ID同步**。
- 快捷**协议发送**。
#### 3.4 应用场景
- C/S服务器开发。
- 制造业自动化控制服务器。
- 游戏服务器开发。
#### 3.5 API文档
[RRQMSocket API文档](https://gitee.com/RRQM_OS/RRQM/wikis/pages?sort_id=3984517&doc_id=1402901)
#### 3.6 Demo
[RRQMBox](https://gitee.com/RRQM_OS/RRQMBox)
## 四、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包管理器 ➨ 程序包管理器控制台
```CSharp
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包管理器 ➨ 程序包管理器控制台
```CSharp
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包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket.RPC.XmlRpc
```
#### 4.6 RPC解析器之JsonRpc
##### 4.6.1 说明
使用JsonRpc解析器,就可以在RPCService中通过Json字符串直接调用服务。
##### 4.6.2 特点
- **异常反馈** 。
- 支持自定义类型。
- 支持类型嵌套。
- 支持js、Android等调用。
##### 4.6.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket.RPC.JsonRpc
```
#### 4.7 API文档
[RRQMSocket API文档](https://gitee.com/RRQM_OS/RRQM/wikis/pages?sort_id=3984517&doc_id=1402901)
#### 4.8 Demo
[RRQMBox](https://gitee.com/RRQM_OS/RRQMBox)
## 五、文件传输框架
#### 5.1 说明
RRQMSocket.FileTransfer是一个高性能的文件传输框架,由于它派生自RRQMRPC,所以也具备RPC的全部特性。
#### 5.2 特点
- 简单易用。
- 多线程处理。
- 高性能,传输速度可达**1000Mb/s**。
- 超简单的**传输限速**设置,1k-10Gb 无级调节。
- 超简单的传输速度、传输进度获取。
- 随心所欲的暂停、继续、停止传输。
- 系统化的权限管理,让敏感文件只允许**私有化下载**。
- **RPC交互**,让客户端和服务器交流不延迟。
- 基于**事件驱动**,让每一步操作尽在掌握。
- 可视化的文件块流,可以实现像迅雷一样的**填充式进度条**。
- 超简单的**断点续传**设置,为大文件传输保驾护航。
- 无状态上传断点续传设置,让同一个文件,在不同客户端之间**接力上传**。
- **断网续传**(企业版支持)
- 已经上传的文件,再次上传时,可实现**快速上传**。
- 极少的GC释放。
#### 5.3 安装
工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台
```CSharp
Install-Package RRQMSocket.FileTransfer
```
#### 5.4 Demo示例
**Demo位置:** [RRQMBox](https://gitee.com/RRQM_OS/RRQMBox)
#### 5.5 性能测试
**说明:** 可以看到,下图正在上传一个Window的系统镜像文件,大约4.2Gb,传输速度已达到800Mb/s,性能非常强悍。其次,GC基本上没有释放。

## 致谢
谢谢大家对我的支持,如果还有其他问题,请加群QQ:234762506讨论。
## 💕 支持本项目
您的支持就是我不懈努力的动力。
#### 爱心赞助名单(以下排名只按照打赏时间顺序)
1. Bobo Joker(200¥)
2. UnitySir(66¥)
3. Coffee(100¥)
4. Ninety(50¥)
5. *琼(100¥)
6. **安(5¥)
#### 商业采购名单(以下排名只按照商业采购时间顺序)
1.凯斯得****有限公司
