RRQMSocket 4.0.16
此程序集已被更名作废。请搜索TouchSocket安装新版。
如果是旧项目,请在https://www.yuque.com/rrqm/touchsocket/731868ac242c91ba5d67a99869af2caa%E7%9A%84%E6%8C%87%E5%BC%95%E4%B8%8B,修改项目。
如果想继续使用旧版,可以继续使用。说明文档可以加QQ群(234762506)获得pdf文件。亦或者发送“RRQMSocket v8.2说明文档”到邮箱505554090@qq.com
dotnet add package RRQMSocket --version 4.0.16
NuGet\Install-Package RRQMSocket -Version 4.0.16
<PackageReference Include="RRQMSocket" Version="4.0.16" />
paket add RRQMSocket --version 4.0.16
#r "nuget: RRQMSocket, 4.0.16"
// Install RRQMSocket as a Cake Addin
#addin nuget:?package=RRQMSocket&version=4.0.16
// Install RRQMSocket as a Cake Tool
#tool nuget:?package=RRQMSocket&version=4.0.16
💿描述
🖥支持环境
- .NET Framework4.5及以上。
- .NET Core3.1及以上。
- .NET Standard2.0及以上。
🥪支持框架
- WPF
- Winform
- Blazor
- Xamarin
- Mono
- Unity
- 其他(即所有C#系)
🌴RRQMSocket特点速览
1.对象池
对象池在RRQMSocket有很多应用,最主要的两个就是连接对象池和处理对象池。连接对象池就是当客户端成功连接时,首先会去连接对象池中找TcpSocketClient,然后没有的话,才会创建。如果哪个客户端掉线了,它的TcpSocketClient就会被回收。这也就是ID重用的原因。
然后就是处理对象池,在RRQMSocket中,接收数据的线程和IOCP内核线程是分开的,也就是比如说客户端给服务器发送了1w条数据,但是服务器收到后处理起来很慢,那传统的iocp肯定会放慢接收速率,然后通知客户端的tcp窗口,发生拥塞,然后让客户端暂缓发送。但是在RRQMSocket中会把收到的数据通过队列全都存起来,首先不影响iocp的接收,同时再分配线程去处理收到的报文信息,这样就相当于一个“泄洪湖泊”,能很大程度的提高处理数据的能力。
2.多线程*
由于有处理对象池的存在,使多线程处理变得简单。在客户端连接完成时,会自动分配该客户端辅助类(TcpSocketClient)的消息处理逻辑线程,假如服务器线程数量为10,则第一个连接的客户端会被分配到0号线程中,第二个连接将被分配到1号线程中,以此类推,循环分配。当某个客户端收到数据时,会将数据排入当前线程所独自拥有的队列当中,并唤醒线程执行。
3.传统IOCP和RRQMSocket
RRQMSocket的IOCP和传统也不一样的,就以微软官方为例,它是开辟了一块内存,然后均分,然后给每个会话分配一个区去接收,等收到数据以后,再复制一份,然后把数据抛出去,让外界处理。而RRQMSocket是每次接收之前,从内存池拿一个可用内存块,然后直接用于接收,等收到数据以后,直接就把这个内存块抛出去了,这样就避免了复制操作。所以,文件传输时效率才会高。当然这个操作在小数据时是没什么优势的。
4.数据处理适配器
相信大家都使用过其他的Socket产品,例如HPSocket,SuperSocket等,那么RRQMSocket在设计时也是借鉴了其他产品的优秀设计理念,数据处理适配器就是其中之一,但和其他产品的设计不同的是,RRQMSocket的适配器功能更加强大,它可以无视真实的数据,而模拟出想要的数据,例如:可以对数据进行预处理,从而解决数据分包。粘包的问题,也可以直接解析HTTP协议,经过适配器处理后传回一个HttpRequest对象等。
5.粘包、分包解决
在RRQMSocket中处理TCP粘包、分包问题是非常简单的。只需要更改不同的数据处理适配器即可。例如:使用固定包头,只需要给TcpSocketClient和TcpClient赋值FixedHeaderDataHandlingAdapter的实例即可。同样对应的处理器也有固定长度 、 终止字符分割 等。
🔗联系作者
✨API文档
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net45 is compatible. net451 was computed. net452 was computed. net46 was computed. net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
NuGet packages (1)
Showing the top 1 NuGet packages that depend on RRQMSocket:
Package | Downloads |
---|---|
Dijing.RRQMHelper
RRQM tcp帮助类 |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|