106 Star 663 Fork 150

GVPdotNET China / RRQMSocket

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

图片名称

合抱之木,生于毫末;九层之台,起于垒土。

图片名称

💿描述

名称 描述
NuGet version (RRQMSocket) RRQMSocket是一个整合性的、超轻量级的、可以免费商用使用的网络通信服务框架。
它具有 高并发连接高并发处理事件订阅插件式扩展
多线程处理内存池对象池 等特点,
让使用者能够更加简单的、快速的搭建网络框架。
NuGet version RRQMSocketFramework是RRQMSocket系列的企业版,
两者在功能上几乎没有区别,但是RRQMSocketFramework无任何依赖,
且可以提供专属的定制功能。后续也会加入企业已定制的优秀功能,希望大家多多支持。
NuGet version (RRQMSocket.FileTransfer) RRQMSocket.FileTransfer是一个高性能的文件传输框架,
您可以用它传输任意大小的文件,它可以完美支持上传下载混合式队列传输
断点续传快速上传传输限速获取文件信息删除文件等。
在实时测试中,它的传输速率可达1000Mb/s。
NuGet version (RRQMSocket.RPC) RPC是一个超轻量、高性能、可扩展的微服务管理平台框架,
目前已完成开发RRQMRPCXmlRpcJsonRpcWebApi部分。
RRQMRPC部分使用RRQM专属协议,支持客户端异步调用
服务端异步触发、以及outref关键字,函数回调等。
在调用效率上也是非常强悍,在调用空载函数,且返回状态时,
10w次调用仅用时3.8秒,不返回状态用时0.9秒。
其他协议调用性能详看性能评测。
NuGet version (RRQMSocket.RPC.WebApi) WebApi是一个扩展于RRQMSocket.RPC的WebApi组件,
可以通过该组件创建WebApi服务解析器,让桌面端、Web端、移动端可以跨语言调用RPC函数。
功能支持路由、Get传参、Post传参等。
NuGet version (RRQMSocket.RPC.XmlRpc) XmlRpc是一个扩展于RRQMSocket.RPC的XmlRpc组件,
可以通过该组件创建XmlRpc服务解析器,完美支持XmlRpc数据类型,类型嵌套,
Array等,也能与CookComputing.XmlRpcV2完美对接。不限Web,Android等平台。
NuGet version (RRQMSocket.RPC.JsonRpc) JsonRpc是一个扩展于RRQMSocket.RPC的JsonRpc组件,
可以通过该组件创建JsonRpc服务解析器,支持JsonRpc全部功能,可与Web,Android等平台无缝对接。
NuGet version (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是每次接收之前,从内存池拿一个可用内存块,然后直接用于接收,等收到数据以后,直接就把这个内存块抛出处理,这样就避免了复制操作,虽然只是细小的设计,但是在传输1000w64kb的数据时,性能相差了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 NuGet version (RRQMCore) Download RRQMCore是为RRQM系提供基础服务功能的库,其中包含:内存池对象池等待逻辑池AppMessenger3DES加密Xml快速存储运行时间测量器文件快捷操作高性能序列化器规范日志接口等。
RRQMSkin NuGet version (RRQMSkin) Download 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文档

RRQMSocket API文档

1.6 Demo

RRQMBox

二、Token框架

2.1 说明

TokenService框架是RRQMSocket提供的派生自TcpService的基础框架,它在TCP基础之上,通过验证Token的方式,可以规范、筛选连接者。这样可以很大程度的保护服务器不疲于非法连接者的攻击。

2.2 安装

工具➨Nuegt包管理器 ➨ 程序包管理器控制台

Install-Package RRQMSocket

2.3 特点

  • 规范筛选连接者,保护服务器。
  • 客户端与服务器必须配套使用。

2.4 应用场景

  • C/S服务器开发。
  • 制造业自动化控制服务器。
  • 游戏服务器开发。

2.5 API文档

RRQMSocket API文档

2.6 Demo

RRQMBox

三、Protocol框架

3.1 说明

ProtocolService框架是RRQMSocket提供的派生自TokenService的基础框架,它在Token基础之上,提供协议+数据的形式发送,其中还包括协议冲突检测协议数据占位等。

3.2 安装

工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台

Install-Package RRQMSocket

3.3 特点

  • 支持ID同步
  • 快捷协议发送

3.4 应用场景

  • C/S服务器开发。
  • 制造业自动化控制服务器。
  • 游戏服务器开发。

3.5 API文档

RRQMSocket API文档

3.6 Demo

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包管理器 ➨ 程序包管理器控制台

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文档

RRQMSocket API文档

4.8 Demo

RRQMBox

五、文件传输框架

5.1 说明

RRQMSocket.FileTransfer是一个高性能的文件传输框架,由于它派生自RRQMRPC,所以也具备RPC的全部特性。

5.2 特点

  • 简单易用。
  • 多线程处理。
  • 高性能,传输速度可达1000Mb/s
  • 超简单的传输限速设置,1k-10Gb 无级调节。
  • 超简单的传输速度、传输进度获取。
  • 随心所欲的暂停、继续、停止传输。
  • 系统化的权限管理,让敏感文件只允许私有化下载
  • RPC交互,让客户端和服务器交流不延迟。
  • 基于事件驱动,让每一步操作尽在掌握。
  • 可视化的文件块流,可以实现像迅雷一样的填充式进度条
  • 超简单的断点续传设置,为大文件传输保驾护航。
  • 无状态上传断点续传设置,让同一个文件,在不同客户端之间接力上传
  • 断网续传(企业版支持)
  • 已经上传的文件,再次上传时,可实现快速上传
  • 极少的GC释放。

5.3 安装

工具 ➨ Nuegt包管理器 ➨ 程序包管理器控制台

Install-Package RRQMSocket.FileTransfer

5.4 Demo示例

Demo位置: RRQMBox

5.5 性能测试

说明: 可以看到,下图正在上传一个Window的系统镜像文件,大约4.2Gb,传输速度已达到800Mb/s,性能非常强悍。其次,GC基本上没有释放。

致谢

谢谢大家对我的支持,如果还有其他问题,请加群QQ:234762506讨论。

Giteye chart

💕 支持本项目

您的支持就是我不懈努力的动力。

爱心赞助名单(以下排名只按照打赏时间顺序)

  1. Bobo Joker(200¥)
  2. UnitySir(66¥)
  3. Coffee(100¥)
  4. Ninety(50¥)
  5. *琼(100¥)
  6. **安(5¥)
  7. **文(200¥)

商业采购名单(以下排名只按照商业采购时间顺序)

1.凯斯得****有限公司

图片名称

Repository Comments ( 37 )

Sign in for post a comment

About

【RRQMSocket 5.0】是一个轻量级网络通信框架,其特点是多兼容、广适配、高并发。其中主要内容包括:TCP、UDP服务通信框架、大文件传输、RPC、WebApi、XmlRpc、JsonRpc等内容 expand collapse
C#
Apache-2.0
Cancel

Releases (18)

All

RRQMSocket

Contributors

All

Activities

Load More
can not load any more
C#
1
https://git.oschina.net/dotnetchina/RRQMSocket.git
git@git.oschina.net:dotnetchina/RRQMSocket.git
dotnetchina
RRQMSocket
RRQMSocket
master

Search

141041 ab9339c7 1850385 141043 25c028d5 1850385