IOCP模型最多能连接多少个客户

clown 2010-01-02 06:23:19
本人也是初学网络编程
都说IOCP能同时连接上万得客户端
我现在对服务端一对一能理解
但是一台服务端 和多台客户端连接 不太懂
如果不用IOCP
直接写成
s=SOCKET();

listen(s,10000)
这样是不是也能同时连接10000台客户端呢?
...全文
88 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinshisike 2010-01-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 zyc285230318 的回复:]
本人也是初学网络编程
都说IOCP能同时连接上万得客户端
我现在对服务端一对一能理解
但是一台服务端 和多台客户端连接 不太懂
如果不用IOCP
直接写成
s=SOCKET();

listen(s,10000)
这样是不是也能同时连接10000台客户端呢?
[/Quote]

IOCP 和连接数,完全是两码事.
-----------------------
怎么隔三差五的就有人问这个?
-----------------------
tan625747 2010-01-03
  • 打赏
  • 举报
回复
listen(s,10000)
后面参数的意义不是那样的

就算你写listen(s,2)


实际上你能连上的大于2
sanguomi 2010-01-02
  • 打赏
  • 举报
回复
直接写成
s=SOCKET();

listen(s,10000)
这样是不是也能同时连接10000台客户端呢?
---------------
这样连不了那么多的,1000都够戗
最近有项目要做一个高性能网络服务器,去网络上搜到到的都是C++版本而且是英文或者简单的DEMO,所以自己动手写了C# 的DEMO。 网络上只写接收到的数据,没有说怎么处理缓冲区数据,本DEMO简单的介绍如何处理接收到的数据。简单易用,希望对大家有用. 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秒。
Nginx for Windows v1 5 9 Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 Nginx是一个很强大的高性能Web和反向代理服务器 它具有很多非常优越的特性 Nginx可以在大多数 Unix like OS 上编译运行 在Linux和unix上分别采用epoll和kqueue网络模型 能够支持高达 50 000 个并发连接数的响应(实际上可能更大) Nginx支持与客户端建立SSL安全连接 因此可以作为SSL安全网关使用 Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多进程并行处理的运行方式 不支持多线程(似乎各平台下都不支持多线程) 2 在Windows下 只支持select和iocp两种网络IO模型 其中iocp模型虽然可以支持高并发连接 但目前版本的iocp只支持Web服务器(有的版本使用iocp作WEB服务器都跑不通) 不支持反向代理服务器 更不支持SSL连接;而select模型不能支持高并发连接 如果要实现高并发 必须使用非常多的进程 3 由于Windows vista之后版本的共享内存在不同进程中的地址不同 因此 在启用多进程时 不能使用共享内存来做SSL的session缓存 也就是说 要实现SSL 只能使用单进程 从而限制了并发连接数 (造成这种结果的原因 可能是作者对Nginx在Windows平台下的应用不太重视 在共享内存中使用了绝对地址指针 如果改成相对地址偏移则可避免) 笔者试图突破上面的限制 在 Nginx v1 5 9 的基础上作了三点改进: 1 完善iocp模型 使其能够支持代理服务器 2 增加wsa网络IO模型(Windows socket异步IO模型) 该模型支持WEB服务器 反向代理服务器和SSL安全连接 与Linux下的epoll具有同等的功能和效率 3 增加Windows和Linux平台下的多线程支持(Unix下尚未实现) 多线程可支持select epoll wsa和iocp网络IO模型 并支持SSL连接 通过上述改进 Nginx在Windows平台下的性能得到大幅提高 其并发连接数一般情况下可达到10万以上 最多可达到40万个 如何使用wsa网络IO模型 与使用iocp模型类似 在配置文件中 增加配置项: use wsa; 如何使用多线程 在配置文件中 增加配置项: worker threads 50; 线程数最大128 笔者邮箱: xiong rh@sina com">Nginx for Windows v1 5 9 Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 Nginx [更多]
Nginx for Windows v1 5 9 source code Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 Nginx是一个很强大的高性能Web和反向代理服务器 它具有很多非常优越的特性 Nginx可以在大多数 Unix like OS 上编译运行 在Linux和unix上分别采用epoll和kqueue网络模型 能够支持高达 50 000 个并发连接数的响应(实际上可能更大) Nginx支持与客户端建立SSL安全连接 因此可以作为SSL安全网关使用 Nginx有Windows移植版 在Windows平台上支持select和iocp两种网络IO模型 在Windows平台上 Nginx的表现可能没有在其它平台上那么优秀 从目前的版本看 Nginx主要有以下几点可能需要改进的地方: 1 Nginx采用多进程并行处理的运行方式 不支持多线程(似乎各平台下都不支持多线程) 2 在Windows下 只支持select和iocp两种网络IO模型 其中iocp模型虽然可以支持高并发连接 但目前版本的iocp只支持Web服务器(有的版本使用iocp作WEB服务器都跑不通) 不支持反向代理服务器 更不支持SSL连接;而select模型不能支持高并发连接 如果要实现高并发 必须使用非常多的进程 3 由于Windows vista之后版本的共享内存在不同进程中的地址不同 因此 在启用多进程时 不能使用共享内存来做SSL的session缓存 也就是说 要实现SSL 只能使用单进程 从而限制了并发连接数 (造成这种结果的原因 可能是作者对Nginx在Windows平台下的应用不太重视 在共享内存中使用了绝对地址指针 如果改成相对地址偏移则可避免) 笔者试图突破上面的限制 在 Nginx v1 5 9 的基础上作了三点改进: 1 完善iocp模型 使其能够支持代理服务器 2 增加wsa网络IO模型(Windows socket异步IO模型) 该模型支持WEB服务器 反向代理服务器和SSL安全连接 与Linux下的epoll具有同等的功能和效率 3 增加Windows和Linux平台下的多线程支持(Unix下尚未实现) 多线程可支持select epoll wsa和iocp网络IO模型 并支持SSL连接 通过上述改进 Nginx在Windows平台下的性能得到大幅提高 其并发连接数一般情况下可达到10万以上 最多可达到40万个 如何使用wsa网络IO模型 与使用iocp模型类似 在配置文件中 增加配置项: use wsa; 如何使用多线程 在配置文件中 增加配置项: worker threads 50; 线程数最大128 nginx v1 5 9 win src在vs2008环境下开发 笔者邮箱: xiong rh@sina com">Nginx for Windows v1 5 9 source code Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件IMAP POP3)代理服务器 并在一个BSD like 协议下发行 Nginx由俄罗斯的程序设计师Igor Sysoev所开发 可供大型的门户网站及搜索引擎使用 [更多]

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧