免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3839 | 回复: 6
打印 上一主题 下一主题

网络服务器进程怎么处理大量并发连接? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-10 10:08 |只看该作者 |倒序浏览
大家知道,在网络程序中,经常会用到select来处理socket, 而这是通过一个fd_set集合来容纳socket的,在当前的linux里面 (以Redhat9为例),其可容纳的socket最大不超过1024.
而在一个繁忙的网络服务器中,是很有可能并发超过1024个连接的..那应该怎么处理比较好呢?各位高手有没有好的模型或者方式来处理这种情况 (除了重编译内核,修改 FD_SETSIZE)

[ 本帖最后由 georgeying 于 2007-10-10 12:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-10 10:50 |只看该作者

回复 #1 georgeying 的帖子

无人响应吗?自己顶上去

论坛徽章:
0
3 [报告]
发表于 2007-10-10 12:33 |只看该作者
考虑多进程/线程模型

论坛徽章:
0
4 [报告]
发表于 2007-10-10 13:04 |只看该作者
epoll是可以的

用selecet管理多个连接的时候,非常慢

论坛徽章:
0
5 [报告]
发表于 2007-10-10 14:10 |只看该作者
楼上的误会了,不是用select处理多个连接,而是一个select对应一个socket,但是进程里面socket数量很大(还有很多打开文件描述符),所以导致socket的值很可能会超过1024,此时用select就无法处理了. 楼上的楼上说用多进程/多线程模型,这个类似apache的模式了,但在目前情况下,改造的工作量比较大,不太合适. 至于楼上的说用epoll, 那是 2.6内核才有的东西....

一个朋友说可以用poll,似乎是可以解决这个问题的..

那我的问题就稍微改一下,针对这种高并发的模式,是用阻塞模式好呢,还是非阻塞模式好?有什么好的框架可以套用吗?

论坛徽章:
0
6 [报告]
发表于 2007-10-11 22:50 |只看该作者
RH下select 默认支持的最大socket值应该是256。可以看相关系统头文件中有个宏FD_SETSIZE定义了最大句柄数,如
#ifndef FD_SETSIZE
#define FD_SETSIZE 256
#endif

用epoll可以支持得更好些。

论坛徽章:
0
7 [报告]
发表于 2007-10-11 22:53 |只看该作者
在2.6以下的,使用epoll可以打上相应补丁就可以了。一般非阻塞模式会比较快,如epoll里ET就是,但是也相应难控制。阻塞相对慢些,但是较为容易控制。

[ 本帖最后由 leponylp 于 2007-10-11 22:55 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP