DELPHI版IOCP完整源码及实例,源码均有详细的中文说明。
2020-01-03 11:19:29 1.21MB IOCP
1
我们的一个项目的服务器端通信层,IOCP类是在此基础上写的,使用了近半年,并发量不大,1k上下,(不过曾做过压力测试,10k的并发量没有问题)还算比较稳定,基本上满足需求。
2019-12-21 22:25:57 28KB IOCP
1
最近有项目要做一个高性能网络服务器,决定下功夫搞定完成端口(IOCP),最终花了一个星期终于把它弄清楚了,并用C++写了一个版本,效率很不错。 但,从项目的总体需求来考虑,最终决定上.net平台,因此又花了一天一夜弄出了一个C#版,在这与大家分享。 一些心得体会: 1、在C#中,不用去面对完成端口的操作系统内核对象,Microsoft已经为我们提供了SocketAsyncEventArgs类,它封装了IOCP的使用。请参考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。 2、我的SocketAsyncEventArgsPool类使用List对象来存储对客户端来通信的SocketAsyncEventArgs对象,它相当于直接使用内核对象时的IoContext。我这样设计比用堆栈来实现的好处理是,我可以在SocketAsyncEventArgsPool池中找到任何一个与服务器连接的客户,主动向它发信息。而用堆栈来实现的话,要主动给客户发信息,则还要设计一个结构来存储已连接上服务器的客户。 3、对每一个客户端不管还发送还是接收,我使用同一个SocketAsyncEventArgs对象,对每一个客户端来说,通信是同步进行的,也就是说服务器高度保证同一个客户连接上要么在投递发送请求,并等待;或者是在投递接收请求,等待中。本例只做echo服务器,还未考虑由服务器主动向客户发送信息。 4、SocketAsyncEventArgs的UserToken被直接设定为被接受的客户端Socket。 5、没有使用BufferManager 类,因为我在初始化时给每一个SocketAsyncEventArgsPool中的对象分配一个缓冲区,发送时使用Arrary.Copy来进行字符拷贝,不去改变缓冲区的位置,只改变使用的长度,因此在下次投递接收请求时恢复缓冲区长度就可以了!如果要主动给客户发信息的话,可以new一个SocketAsyncEventArgs对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。 6、测试结果:(在我的笔记本上时行的,我的本本是T420 I7 8G内存) 100客户 100,000(十万次)不间断的发送接收数据(发送和接收之间没有Sleep,就一个一循环,不断的发送与接收) 耗时3004.6325 秒完成 总共 10,000,000 一千万次访问 平均每分完成 199,691.6 次发送与接收 平均每秒完成 3,328.2 次发送与接收 整个运行过程中,内存消耗在开始两三分种后就保持稳定不再增涨。 看了一下对每个客户端的延迟最多不超过2秒。
2019-12-21 22:24:54 15KB IOCP 完成端口 源码
1
本代码为一个高并发量IOCP服务端模型,IOCP(I/O Completion Port),常称I/O完成端口。 IOCP模型属于一种通讯模型,适用于能控制并发执行的高负载服务器的一个技术。 通俗一点说,就是用于高效处理很多很多的客户端进行数据交换的一个模型。或者可以说,就是能异步I/O操作的模型。
2019-12-21 22:21:56 7.28MB IOCP Scoket 高并发
1
一个开源的高性能IOCP(完成端口)网络通信封装框架《HP-Socket》的使用实例,官方的DEMO只有MFC对话框的版本,对于刚接触这个框架的新手不太容易把代码移植到自己的项目。 此DEMO使用标准C++控制台来实现,对于刚接触网络编程的新手来说可以更容易跟踪理解 HP-Socket 组件的工作流程,从而快速移植到自己的项目中。 此DEMO采用PACK模型,包含服务器及客户端的实现。PACK模型可以让你不用考虑数据的分包组包,也不用担心粘包及解包,数据收发的一切工作都由HPSocket框架组件来完成,让你可以专注于自己的业务逻辑。 此DEMO采用VS2019编译,如果你版本低于2019,请修改项目属性->常规 里两个地方就可以正常编译: 1.修改一下“Windows SDK 版本”为你已安装的WINDOWS SDK版本。 2.修改“平台工具集”为你当前正在使用的VS的版本 HPSocket官网:https://www.oschina.net/p/hp-socket
2019-12-21 22:20:20 176.92MB HPSocket IOCP Socket封装类 C/C++网络编程
1
这个是一个结合了OpenSSL 和 IOCP的一个例子,需要的可以参考一下的。
2019-12-21 22:09:48 13.2MB openssl WIndows IOCP
1
开发环境: VS2010 开发语言: C++ Winsock I/O模型: IOCP (完成端口模型) 代码示例包括Client和Server, common下包括Functor和Thread两个模块。Functor封装了函数对象,用于各种Callback;Thread封装了线程函数对象,用于将类的成员函数绑定到一个线程来执行。 server路径下IServer定义了服务端的接口,CompletionPort实现了IServer,并利用观察者模式和上层解耦。Server的实现分解为IoData, SocketContext, Disposer, Initializer, Parser, Poster, Creator几个主要的模块,并通过CompletionPort包装为统一的接口。其中对于连接的监听采用了AcceptEx函数来实现异步的Accept,该过程定义在WatchProc所对应的线程函数中。IOCPTest定义了服务端的测试接口,可以通过控制命令来实现对Server的Start, Stop, Suspend, Resume操作。 client下IClient定义了客户端的接口,SocketClient实现了IClient,通过ConnectProc以及SendPacketProc两个过程分别控制连接的建立和数据包的发送,并通过队列来管理连接到Server的socket。ClientTest定义了Client端的测试接口,可以自行定义配置信息。 Server运行的过程中会记录日志文件,方便查看服务器的运行状态。
2019-12-21 22:09:39 37KB IOCP 完成端口 异步 观察者模式
1
例子主要包括SocketAsyncEventArgs通讯封装、服务端实现日志查看、SCOKET列表、上传、下载、远程文件流、吞吐量协议,用于测试SocketAsyncEventArgs的性能和压力,最大连接数支持65535个长连接,最高命令交互速度达到250MB/S(使用的是127.0.0.1的方式,相当于千兆网卡1Gb=125MB/S两倍的吞吐量)。服务端用C#编写,并使用log4net作为日志模块; 同时支持65536个连接,网络吞吐量可以达到400M。
2019-12-21 22:04:22 3.43MB 完成端口 IOCP SOCKET
1
http://blog.csdn.net/piggyxp/article/details/6922277#comments这篇文章很好的描述了IOCP并提供了很好的客户端和服务器例子;而我为服务器添加了发送数据,采用WSASend函数,然后给客户端加了接收数据,方便测试服务器发来的数据。工程用的vs2010。
2019-12-21 22:02:24 3MB 完成端口 IOCP
1
工程里面有两个项目:分别是使用IOCP的服务端和测试IOCP的客户端。 客户端连接上服务器后发送:hello, this is client 服务器回应:服务器收到了请求, 现在开始传送文件... 然后调用TransmitFile发送文件“测试文件传输.txt” 到客户端 客户端接收文件 代码简洁,适合初学者学习
2019-12-21 21:57:48 16KB IOCP 完成端口 服务器
1