# RRQMSocket
**Repository Path**: the-source-of-wind/RRQMSocket
## Basic Information
- **Project Name**: RRQMSocket
- **Description**: RRQMSocket是一个整合性网络通信框架,特点是支持高并发、事件驱动、易用性强、二次开发难度低等。其中主要内容包括:TCP服务通信框架、文件传输、RPC等内容
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/RRQM_Home
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 817
- **Created**: 2021-04-10
- **Last Updated**: 2021-04-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://www.nuget.org/packages?q=rrqm)
[](https://www.apache.org/licenses/LICENSE-2.0.html)
[](https://img.shields.io/nuget/dt/RRQMSocket)
[](https://gitee.com/dotnetchina/RRQMSocket/stargazers)
[](https://gitee.com/dotnetchina/RRQMSocket/members)
日月之行,若出其中;星汉灿烂,若出其里。
## 一、程序集描述
RRQMSocket是一个整合性的、超轻量级的网络通信框架。支持C#语言系全平台(.NET Framework4.5及以上,.NET Core3.1及以上,.net standard2.0及以上),支持C#语言系全框架(WPF、Winform、Blazor、Xamarin、Mono、Unity等)。它具有高并发、事件订阅、插件式扩展、自动活性检测、多线程处理等特点,让使用者能够更加简单的、快速的搭建网络框架。
目前RRQMSocket支持的传输层协议有TCP和UDP两款,基于这两大协议的支持,使得RRQMSocket能够解析绝大部分应用层协议,比如耳熟能详的HTTP、FTP、Telnet、POP3、SMTP、DNS等,不仅如此,RRQMSocket还内置了多种分包算法,使跨语言解析变得更加简单快捷。
RRQMSocket内部设计大量引用了内存池、对象池、等待池、线程池等众多“池”化设计,使得整个框架在接收和发送数据时基本上避免了“创建-销毁”的性能消耗。而且在接收数据时设计了完美的IOCP模型,不仅避免了接收数据的再复制行为,还让数据接收与数据处理分线程操作,大大减轻了内核的负担,让内核专注于接收,性能由此提升不少。这些优化行为的最终结果就是让RRQMSocket拥有超强的数据接收处理能力,这也就意味着它的适用场景也更加广泛,您可以用它开发分布式服务器、游戏服务器、文件管理服务器、即时通信服务器等。我相信,它的表现一定令您满意。
除了基本的框架外,程序集内还开发出了一些成熟框架,目前有`文件传输框架`、`RPC框架`两种,后续还会不断更新添加其他框架,希望大家多多支持和关注。
### 联系作者
- [CSDN博客主页](https://blog.csdn.net/qq_40374647)
- [哔哩哔哩视频](https://space.bilibili.com/94253567)
- [源代码仓库主页](https://gitee.com/RRQM_Home)
- 交流QQ群:234762506
### API文档
[RRQMSocket API文档](https://gitee.com/dotnetchina/RRQMSocket/wikis/1.1%20%E6%A6%82%E8%BF%B0?sort_id=3868546)
(文档目前还在积极完善当中)
## 二、程序集架构概述
#### 2.1 常用类继承图


#### 2.2 服务器工作流程
#### 2.3 客户端工作流程
#### 2.4 粘包、分包处理架构

## 三、TCP框架
#### 3.1 创建TCP框架
几行代码就可以搭建出完整的TCP高性能框架,具体创建步骤详见[RRQMSocket创建高并发、高性能TCP框架](https://blog.csdn.net/qq_40374647/article/details/110679663?spm=1001.2014.3001.5501)。
#### 3.2 特点
- 简单易用。
- 多线程处理。
- IOCP完美设计模型,避免收到数据再复制。
- 简单、稳定管理客户端连接,自动检验客户端活性。
- 超简单的解决粘包、分包问题,详见[RRQMSocket解决TCP粘包、分包问题](https://blog.csdn.net/qq_40374647/article/details/110680179?spm=1001.2014.3001.5501)。
- 内存池设计,避免内存重复申请、释放。
- 对象池设计,避免数据对象的申请、释放。
#### 3.3 性能
**固定包头解析**
不难看出,在固定包头分包策略中,吞吐量大概在20w左右,而且基本没有GC。
## 四、文件传输框架
#### 4.1 创建文件服务器框架
几行代码就可以搭建出完整的高性能文件传输框架,具体创建步骤详见[RRQMSocket创建文件传输、大文件续传框架](https://blog.csdn.net/qq_40374647/article/details/100546120?spm=1001.2014.3001.5501)。
#### 4.2 特点
- 简单易用。
- 多线程处理。
- 高性能,传输速度可达500Mb/s。
- 超简单的传输限速设置,1k-10Gb 无级调节。
- 超简单的传输速度、传输进度获取。
- 随心所欲的暂停、继续、停止传输。
- 系统化的权限管理,让敏感文件只允许私有化下载。
- 随时发送消息,让客户端和服务器交流不延迟。
- 基于事件驱动,让每一步操作尽在掌握。
- 可视化的文件块流,可以实现像迅雷一样的填充式进度条。
- 超简单的断点续传设置,为大文件传输保驾护航。
- 无状态上传断点续传设置,让同一个文件,在不同客户端之间接力上传。
- 已经上传的文件,再次上传时,可实现快速上传。
- 极少的GC释放。
#### 4.3 Demo示例
**Demo位置:** [RRQMSocket.FileTransfer.Demo](https://gitee.com/RRQM_Home/RRQMSocket.FileTransfer.Demo)
**说明:** 可以看到,图一正在上传一个Window的系统镜像文件,大约4.2Gb,传输速度已达到346Mb/s,这是因为服务器和客户端在同一电脑上,磁盘性能限制导致的。其次,GC基本上没有释放,性能非常强悍,图二是下载文件,性能依旧非常强悍。


## 五、RPC框架
#### 5.1 创建RPC框架
几行代码就可以搭建出完整的高性能文件传输框架,具体创建步骤详见[RRQMSocket创建RPC高性能微框架,支持任意序列化、out及ref](https://blog.csdn.net/qq_40374647/article/details/109143243?spm=1001.2014.3001.5501)。
#### 5.2 特点
- 简单易用。
- 多线程处理。
- 高性能,在保证送达但不返回的情况下,10w次调用用时0.8s,在返回的情况下,用时3.9s。
- 支持TCP、UDP等不同的协议调用相同服务。
- 支持指定服务异步执行。
- 支持权限管理,让非法调用死在萌芽时期。
- 全自动代码生成,可使用系统编译,也可以自己使用源代码编译。
- 代理方法会生成异步方法,支持客户端异步调用。
- 支持out、ref,参数设定默认值等。
- 随心所欲的序列化方式,除了自带的[超轻量级二进制序列化](https://blog.csdn.net/qq_40374647/article/details/114178244?spm=1001.2014.3001.5501)、xml序列化外,用户可以自己随意使用其他序列化。
- 支持编译式调用,也支持方法名+参数式调用。
- 全异常反馈,服务里发生的异常,会一字不差的反馈到客户端。
- 超简单的回调方式。
#### 4.3 Demo示例
**Demo位置:** [RRQMSocket.RPC.Demo](https://gitee.com/RRQM_Home/RRQMSocket.RPC.Demo)
**说明:**
图一、图二、图三分别为`UDP无反馈调用`、`TCP有反馈调用`、`TCP连接池有反馈调用`。调用次数均为10w次,调用性能非常nice。在无反馈中,吞吐量达14.28w,在有反馈中达2.72w,简直秒杀WCF(WCF使用http协议,在本机测试吞吐量为310)



## 六、致谢
谢谢大家对我的支持,如果还有其他问题,请加群QQ:234762506讨论。
## 七、赞助
您的支持就是我不懈努力的动力。打赏时请一定留下您的称呼。
**赞助总金额:266.6¥**
**赞助名单:**
(以下排名只按照打赏时间顺序)
> 1.Bobo Joker
> 2.UnitySir
