2021-06-24 19:26:57 +08:00
2021-06-24 19:26:57 +08:00
2021-06-24 17:09:52 +08:00
2021-06-24 16:27:36 +08:00
2021-06-23 22:25:35 +08:00
2021-03-02 14:10:40 +08:00
2021-05-06 14:47:48 +08:00
2021-06-24 13:32:34 +08:00
2021-06-24 19:26:57 +08:00

图片名称

NuGet version (RRQMSocket) License Download star fork

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

💿描述

名称 描述
NuGet version (RRQMSocket) RRQMSocket是一个整合性的、超轻量级的网络通信服务框架。
它具有 高并发连接高并发处理事件订阅插件式扩展
多线程处理内存池对象池 等特点,
让使用者能够更加简单的、快速的搭建网络框架。
NuGet version (RRQMSocket.FileTransfer) RRQMSocket.FileTransfer是一个高性能的文件传输框架
您可以用它传输任意大小的文件,它可以完美支持上传下载混合式队列传输
断点续传快速上传传输限速获取文件信息删除文件等。
在实时测试中它的传输速率可达500Mb/s。
NuGet version (RRQMSocket.RPC) RRQMSocket.RPC是一个超轻量、高性能、可扩展的微服务管理平台框架
目前已完成开发RRQMRPCXmlRpcJsonRpcWebApi部分。
RRQMRPC部分使用RRQM专属协议支持客户端异步调用
服务端异步触发、以及outref关键字,函数回调等。
在调用效率上也是非常强悍,在调用空载函数,且返回状态时,
10w次调用仅用时3.8秒,不返回状态用时0.9秒。
其他协议调用性能详看性能评测。
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有很多应用最主要的两个就是连接对象池处理对象池。连接对象池就是当客户端成功连接时首先会去连接对象池中找TcpSocketClient然后没有的话才会创建。如果哪个客户端掉线了它的TcpSocketClient就会被回收。这也就是ID重用的原因。

然后就是处理对象池在RRQMSocket中接收数据的线程和IOCP内核线程是分开的也就是比如说客户端给服务器发送了1w条数据但是服务器收到后处理起来很慢那传统的iocp肯定会放慢接收速率然后通知客户端的tcp窗口发生拥塞然后让客户端暂缓发送。但是在RRQMSocket中会把收到的数据通过队列全都存起来首先不影响iocp的接收同时再分配线程去处理收到的报文信息这样就相当于一个“泄洪湖泊”能很大程度的提高处理数据的能力。

多线程

由于有处理对象池的存在使多线程处理变得简单。在客户端连接完成时会自动分配该客户端辅助类TcpSocketClient的消息处理逻辑线程假如服务器线程数量为10则第一个连接的客户端会被分配到0号线程中第二个连接将被分配到1号线程中以此类推循环分配。当某个客户端收到数据时会将数据排入当前线程所独自拥有的队列当中并唤醒线程执行。

传统IOCP和RRQMSocket

RRQMSocket的IOCP和传统也不一样的以微软官方为例使用MemoryBuffer开辟一块内存然后均分然后给每个会话分配一个区接收等收到数据以后再复制一份然后把复制的数据抛出处理。而RRQMSocket是每次接收之前从内存池拿一个可用内存块然后直接用于接收等收到数据以后直接就把这个内存块抛出去了这样就避免了复制操作,虽然只是细小的设计,但是在传输1000w64kb的数据时,性能相差了10倍。所以也是基于此,文件传输时效率才会高。

数据处理适配器

相信大家都使用过其他的Socket产品例如HPSocketSuperSocket等那么RRQMSocket在设计时也是借鉴了其他产品的优秀设计理念数据处理适配器就是其中之一但和其他产品的设计不同的是RRQMSocket的适配器功能更加强大它可以无视真实的数据而模拟出想要的数据例如可以对数据进行预处理从而解决数据分包。粘包的问题也可以直接解析HTTP协议经过适配器处理后传回一个HttpRequest对象等。

粘包、分包解决

在RRQMSocket中处理TCP粘包、分包问题是非常简单的。只需要更改不同的数据处理适配器即可。例如:使用固定包头只需要给TcpSocketClient和TcpClient赋值FixedHeaderDataHandlingAdapter的实例即可。同样对应的处理器也有固定长度终止字符分割 等。

🔗联系作者

API文档

RRQMSocket API文档

📦 安装

🍻RRQM系产品

名称 版本Nuget Version 下载Nuget Download 描述
RRQMCore NuGet version (RRQMCore) Download RRQMCore是为RRQM系提供基础服务功能的库其中包含内存池对象池等待逻辑池AppMessenger3DES加密Xml快速存储运行时间测量器文件快捷操作高性能序列化器规范日志接口等。
RRQMMVVM NuGet version (RRQMMVVM) Download RRQMMVVM是超轻简的MVVM框架但是麻雀虽小五脏俱全。
RRQMSkin NuGet version (RRQMSkin) Download RRQMSkin是WPF的控件样式库其中包含 无边框窗体圆角窗体水波纹按钮输入提示筛选框控件拖动效果圆角图片框弧形文字扇形元素指针元素饼图时钟速度表盘 等。

💐快速入门

一、TCP框架

1.1 创建服务器

1.4 Demo

RRQMBox

二、文件传输框架

2.1 特点

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

2.6 Demo示例

Demo位置 RRQMBox

说明: 可以看到图一正在上传一个Window的系统镜像文件大约4.2Gb传输速度已达到346Mb/s这是因为服务器和客户端在同一电脑上磁盘性能限制导致的。其次GC基本上没有释放性能非常强悍图二是下载文件性能依旧非常强悍。

上传文件 下载文件

三、RPC框架

RPC框架是所有远程过程调用的微服务管理平台在该平台的托管下使多种协议、多种序列化方式调用成为可能。目前可使用RRQMRPC、WebApi、XmlRpc、JsonRpc共同调用。

3.1 RRQMRPC

特点

  • 简单易用。
  • 多线程处理。
  • 高性能在保证送达但不返回的情况下10w次调用用时0.8s在返回的情况下用时3.9s。
  • 支持TCP、UDP等不同的协议调用相同服务。
  • 支持指定服务异步执行。
  • 支持权限管理,让非法调用死在萌芽时期。
  • 全自动 代码生成 可使用系统编译成dll调用也可以使用插件生成代理调用。
  • 代理方法会生成异步方法,支持客户端异步调用。
  • 支持out、ref ,参数设定默认值等。
  • 随心所欲的序列化方式,除了自带的超轻量级二进制序列化、xml序列化外用户可以自己随意使用其他序列化。
  • 支持编译式调用,也支持方法名+参数式调用。
  • 全异常反馈 ,服务里发生的异常,会一字不差的反馈到客户端。
  • 超简单、自由的回调方式

RRQMRPC性能测试

说明: 图一、图二、图三分别为UDP无反馈调用TCP有反馈调用TCP连接池有反馈调用。调用次数均为10w次调用性能非常nice。在无反馈中吞吐量达14.28w在有反馈中达2.72w。

输入图片说明

输入图片说明

输入图片说明

示例Demo

RRQMBox

3.2 WebApi

WebApi功能目前仅仅适用于Api调用不具备MVC全部功能。

特点

  • 多线程处理。
  • 高性能100个客户端10w次调用仅用时17s。
  • 全异常反馈 ,服务里发生的异常,会一字不差的反馈到客户端。
  • 支持大部分路由规则。

创建WebApi服务器

新建类文件,继承于ServerProvider,使用Rount属性指定路由规则,同时将其中公共方法标识为Route即可。同时也可制定路由规则。

3.3 XmlRpc

完美支持XmlRpc数据类型类型嵌套Array等。

3.4 JsonRpc

致谢

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

💕 支持本项目

您的支持就是我不懈努力的动力。打赏时请一定留下您的称呼。

赞助总金额:516.6¥

赞助名单:

(以下排名只按照打赏时间顺序)

1.Bobo Joker

2.UnitySir

3.Coffee

4.Ninety

5.*琼

图片名称
Description
TouchSocket is an integrated .NET networking framework that includes modules for socket, TCP, UDP, SSL, named pipes, HTTP, WebSocket, RPC, and more. It offers a one-stop solution for TCP packet issues and enables quick implementation of custom data message parsing using protocol templates.
Readme Apache-2.0 453 MiB
Languages
csharp 46.7%
C# 27.1%
MDX 25.9%
TypeScript 0.3%