C# IOCP完成端口模型(简单实用高效)
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对象,或者在初始化中建立几个来专门用于主动发送信息,因为这种需求一般是进行信息群发,建立一个对象可以用于很多次信息发送,总体来看,这种花销不大,还减去了字符拷贝和消耗。demo下载地址:http://files.cnblogs.com/files/airtcp/IocpServer.zip
转载于:https://www.cnblogs.com/airtcp/p/5230342.html
C# IOCP完成端口模型(简单实用高效)相关推荐
- 一个对Winsock完成端口模型封装的类
转载请按如下方式显示标明原创作者及出处,以示尊重!! 原创作者:elssann 联系方式:PPP elssann@hotmail.com 在Windows下进行网络服务端程序开发,毫无疑问,Winso ...
- 高级性能服务器编程模型【IOCP完成端口】开发实现【二】
因为需要参考各种资料,所以还是需要一些时间才能够做好的. 而且在开发中,还会面对一些不得不仔细去解决的问题. 我打算尽量从Win32API的基础上面进行开发,能够不使用Delphi封装的类就不用,任何 ...
- linux socket完成端口,“完成端口”模型(IOCP)
// /// "完成端口"模型(IOCP)(基于重叠端口(异步)的LF线程池框架) /// I/O完成端口是应用程序使用线程池来进行处理异步的I/O请求的一种机制. /// 使用I ...
- 高性能的 socket 通讯服务器(完成端口模型--IOCP)
2019独角兽企业重金招聘Python工程师标准>>> 很多人费尽心思,都没有找到一个完美的 I/O CP 例程,甚至跟人于误解,先将本人编写的例程公布出来,希望对那些苦苦寻觅的人带 ...
- ECCV22 | ByteTrack:简单、高效、实用的多目标跟踪方法
点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 后台 ...
- Windows Sockets网络编程(5)完成端口模型(IOCP)
摘要:上篇文章<Windows Sockets网络编程(4)套接字重叠IO模型>中,讲到了重叠IO的模型,同时也提到了APC函数,重叠IO是通过注册APC函数让线程调用来实现的,细心的你会 ...
- IOCP 网络通讯模型源码解读
From: http://hi.baidu.com/tsingsing/item/1aa5062fa27791fa50fd87b7 以前写服务器的时候用的是iocp,最近偶然发现windows的 网络 ...
- python可以做鲁棒优化吗_XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言
此文简单介绍AROMA的1.0版本:XProg.希望可以帮做鲁棒优化相关的同行们省去手动求对偶和Robust Counterpart,然后吭哧吭哧编程的麻烦. 本文将简单介绍XProg(内容主要来自X ...
- 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』k8s的NodePort类型Service以及Label的简单实用(68) 上次主要说了service的一种类型,c ...
最新文章
- 走在网页游戏开发的路上(八)
- List接口中常用的方法
- 离职交接文档_关于工作交接
- Android 动画(二)
- Go 如何实现热重启
- 怎么配置iptv服务器信息,请配置iptv服务器信息
- 对象-关系映射ORM(Object Relational Mapping)(转)
- C++ primer plus学习笔记 (3) _函数
- Codeforces Round #499 (Div. 2) C. Fly(数学+思维模拟)
- Zabbix 网页端监控工具
- u检验和t检验区别与联系
- Android项目修改项目名称
- 理解时间:时间时区那些事
- 基于STM32的智能篮球测温记分记时系统
- C语言——对文件的输入输出
- 时间戳与日期年月日时分秒的转换
- 基于java房屋租赁平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- FT232USB串口通信线序
- March 27th Tuesday (三月 二十七日 火曜日)
- 千锋教育-加百利 web