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完成端口模型(简单实用高效)相关推荐

  1. 一个对Winsock完成端口模型封装的类

    转载请按如下方式显示标明原创作者及出处,以示尊重!! 原创作者:elssann 联系方式:PPP elssann@hotmail.com 在Windows下进行网络服务端程序开发,毫无疑问,Winso ...

  2. 高级性能服务器编程模型【IOCP完成端口】开发实现【二】

    因为需要参考各种资料,所以还是需要一些时间才能够做好的. 而且在开发中,还会面对一些不得不仔细去解决的问题. 我打算尽量从Win32API的基础上面进行开发,能够不使用Delphi封装的类就不用,任何 ...

  3. linux socket完成端口,“完成端口”模型(IOCP)

    // /// "完成端口"模型(IOCP)(基于重叠端口(异步)的LF线程池框架) /// I/O完成端口是应用程序使用线程池来进行处理异步的I/O请求的一种机制. /// 使用I ...

  4. 高性能的 socket 通讯服务器(完成端口模型--IOCP)

    2019独角兽企业重金招聘Python工程师标准>>> 很多人费尽心思,都没有找到一个完美的 I/O CP 例程,甚至跟人于误解,先将本人编写的例程公布出来,希望对那些苦苦寻觅的人带 ...

  5. ECCV22 | ByteTrack:简单、高效、实用的多目标跟踪方法

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心技术交流群 后台回复[ECCV2022]获取ECCV2022所有自动驾驶方向论文! 后台 ...

  6. Windows Sockets网络编程(5)完成端口模型(IOCP)

    摘要:上篇文章<Windows Sockets网络编程(4)套接字重叠IO模型>中,讲到了重叠IO的模型,同时也提到了APC函数,重叠IO是通过注册APC函数让线程调用来实现的,细心的你会 ...

  7. IOCP 网络通讯模型源码解读

    From: http://hi.baidu.com/tsingsing/item/1aa5062fa27791fa50fd87b7 以前写服务器的时候用的是iocp,最近偶然发现windows的 网络 ...

  8. python可以做鲁棒优化吗_XPROG: 简单实用的鲁棒优化(RO, DRO)编程语言

    此文简单介绍AROMA的1.0版本:XProg.希望可以帮做鲁棒优化相关的同行们省去手动求对偶和Robust Counterpart,然后吭哧吭哧编程的麻烦. 本文将简单介绍XProg(内容主要来自X ...

  9. 『中级篇』k8s的NodePort类型Service以及Label的简单实用(68)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』k8s的NodePort类型Service以及Label的简单实用(68) 上次主要说了service的一种类型,c ...

最新文章

  1. 走在网页游戏开发的路上(八)
  2. List接口中常用的方法
  3. 离职交接文档_关于工作交接
  4. Android 动画(二)
  5. Go 如何实现热重启
  6. 怎么配置iptv服务器信息,请配置iptv服务器信息
  7. 对象-关系映射ORM(Object Relational Mapping)(转)
  8. C++ primer plus学习笔记 (3) _函数
  9. Codeforces Round #499 (Div. 2) C. Fly(数学+思维模拟)
  10. Zabbix 网页端监控工具
  11. u检验和t检验区别与联系
  12. Android项目修改项目名称
  13. 理解时间:时间时区那些事
  14. 基于STM32的智能篮球测温记分记时系统
  15. C语言——对文件的输入输出
  16. 时间戳与日期年月日时分秒的转换
  17. 基于java房屋租赁平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  18. FT232USB串口通信线序
  19. March 27th Tuesday (三月  二十七日 火曜日)
  20. 千锋教育-加百利 web

热门文章

  1. 13. OD-内嵌补丁,过期的软件DVD Menu Studio破解,switch函数,break等于KillTimer
  2. caffe使用训练好的模型对自己的一张图片进行测试
  3. Linux系统编程:验证kernel内核缓存区大小-4096字节
  4. DNS域传输漏洞利用总结
  5. 并不对劲的noip2018
  6. python中的参数
  7. netty Demo
  8. 转到Servlet出现500型错误
  9. for语句 2017-03-17
  10. Codeforces Round #205 (Div. 2) : D