免费注册 查看新帖 |

Chinaunix

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

请教:如何用select监听很多个i/o [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-27 16:42 |只看该作者 |倒序浏览
模拟场景如下:
在一个聊天室中(一个进程),端口为8888
最多允许32人.任何人发的消息服务器转发到其他人.
问题是采用select监听client的socket,如果client很多,
难道要写上n个 if(FD_ISSET(socket, &rset))之类的语句?
这样感觉很不美观和专业.
请问有撒好的解决办法?
或许可以根据select返回的描述符来判断,听听大家的意见.

论坛徽章:
0
2 [报告]
发表于 2007-08-27 16:47 |只看该作者
难道不会使用循环吗?

论坛徽章:
0
3 [报告]
发表于 2007-08-27 16:54 |只看该作者
对循环来说,首先连接的用户数是 不确定,是动态变化的.
其次socket的值也是动态变化的.
感觉也不是很明了.

论坛徽章:
0
4 [报告]
发表于 2007-08-27 17:00 |只看该作者
select 返回时, 参数中的请求监听的句柄(fd)集,改变为活动句柄集.
然后就应该用循环去一个个的检测句柄是否在这个集中...


发现自己写的这个说明好像不太行,不知道说清楚没有.

论坛徽章:
0
5 [报告]
发表于 2007-08-27 17:08 |只看该作者
原帖由 yuangong 于 2007-8-27 16:54 发表
对循环来说,首先连接的用户数是 不确定,是动态变化的.
其次socket的值也是动态变化的.
感觉也不是很明了.


事实上,做这个服务程序的重点就在于如何实现一个数据结构,能够方便地增加减少用户,并能够遍历这些用户啊。

论坛徽章:
0
6 [报告]
发表于 2007-08-27 17:28 |只看该作者
原帖由 福瑞哈哥 于 2007-8-27 17:08 发表


事实上,做这个服务程序的重点就在于如何实现一个数据结构,能够方便地增加减少用户,并能够遍历这些用户啊。

我明白你的意思.
这种方法也行,也可以解决上面的问题.
再扩展下,假如这个进程同时监听父进程的socket,也就说收到父进程的消息和client的消息处理逻辑不一样
解决这个问题就是当socket可读,再判断socket是否是父进程的socket,是则执行另一种逻辑.

论坛徽章:
0
7 [报告]
发表于 2013-01-20 15:01 |只看该作者
学习一下 学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP