C#基于SocketAsyncEventArgs实现的完成端口封装,可以支持65535个连接

SQLDebug_Fan SQLDebug_Fan 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
原文地址:http://blog.csdn.net/sqldebug_fan/article/details/17556353
例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。服务端用C#编写,并使用log4net作为日志模块;客户端使用DELPHI编写,和以前的DELPHI版完成端口共用一个客户端,没有提供C#版的客户端。
服务端
服务端是一个控制台程序,支持分颜色显示日志,界面截图如下:

客户端
用于对服务端进行性能测试,实现了吞吐量测试协议,还有日志、查看客户端、上传、下载、远程文件流五个应用层协议,可以作为要实现其他协议的例子参考,其中远程文件流可以作为分布式系统的底层数据交互模块,界面截图如下:

性能测试结果
支持65535个长连接,为了支持65535个连接,由于测试程序是32位,最大内存2G,需要把每个连接使用的内存改下,主要修改ProtocolKey.cs单元的这两个参数,默认是4KB,我们修改为1KB。

public class ProtocolConst
{
public static int InitBufferSize = 1024; //解析命令初始缓存大小
public static int ReceiveBufferSize = 1024; //IOCP接收数据缓存大小,设置过小会造成事件响应增多,设置过大会造成内存占用偏多
}

循环发包网络流量可以达到250MB/S,受限于是网卡流量,千兆网卡最大1Gb=125MB/S,为了测试最大吞吐量,我们需要把客户端和服务器放在同一台电脑上,使用127.0.0.1这个IP测试,127.0.0.1是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
其中截图如下:


DEMO下载地址:http://download.csdn.net/detail/sqldebug_fan/6874257,例子代码中服务端用C#编写,客户端用DELPHI编写。
免责声明:此代码只是为了演示C#完成端口编程,仅用于学习和研究,切勿用于商业用途。水平有限,C#也属于初学,错误在所难免,欢迎指正和指导。邮箱地址:fansheng_hx@163.com。
...全文

相关推荐

C#高性能大容量SOCKET并发完成端口例子,带C#源码客户端及服务端

例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议, 用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式, 相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。

lijian910wolf

C#高并发网络通信:基于IOCP完成端口的SOCKET并发实现与源码解析

在Windows平台构建高并发网络服务时,C#开发者常面临连接数增长后性能骤降的挑战,其根源往往在于通信模型的选择——每连接一线程的阻塞式架构无法应对海量并发。完成端口(IOCP)作为内核级异步I/O机制,通过少量工作线程处理大量完成通知,成为事件驱动模型的基石。结合SocketAsyncEventArgs与对象池、内存池技术,可显著降低GC压力与内存碎片,实现稳定吞吐。这种方案广泛应用于上位机通信、物联网网关、即时通讯服务等场景。本文提供一套基于IOCP的C#高性能SOCKET并发源码,自带客户端与压测工

臭鼠标

C#高性能Socket服务:完成端口与SocketAsyncEventArgs并发骨架

在高并发网络服务中,异步I/O模型是突破性能瓶颈的核心。从早期的阻塞线程模型到基于回调的异步编程,每次演进都旨在降低资源消耗和提升吞吐量。Windows平台上的完成端口(IOCP)由内核维护完成队列,配合少量工作线程即可高效处理海量连接,这一机制被.NET的SocketAsyncEventArgs所封装,成为C#服务端支撑大容量连接的事实标准。与此同时,高并发场景下的内存管理同样关键,使用缓冲池复用字节数组、通过对象池管理SocketAsyncEventArgs实例,能显著减少GC压力与内存碎片。本文提供了

周传炽

C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码

例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。服务端用C#编写,并使用log4net作为日志模块; 同时支持65536个连接,网络吞吐量可以达到400M。

SQLDebug_Fan

C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码.zip

IOCPDemo_NET(C#高性能大容量SOCKET并发完成端口例子(有C#客户端)完整实例源码),主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。服务端用C#编写,并使用log4net作为日志模块; 同时支持65536个连接,网络吞吐量可以达到400M。

探索者我有我路向
评论 58
收藏 已收藏
分享
返回顶部
SQLDebug_Fan
C# 111,128 成员 642,537 内容