免费注册 查看新帖 |

Chinaunix

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

socket服务的一些想法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-11 14:03 |只看该作者 |倒序浏览
看到不少地方在搭建一些性能要求高的socket服务,然后看人家在讨论i/o模型,然后引起我的兴趣看看linux网络的内核代码;把驱动到传输层的代码过了一遍后,才发现原来socket服务的搭建问题都集中在如何管理大量的连接问题以及一些多线程多进程问题;
实际上linux内核网络内码于此相关需要注意的东西不多,每个ip包到达后,内核会提取出saddr daddr port 信息然后__xx_lookup_hash 找相应的sock结构(体现在用户层就是fd),然后通知相应的fd数据已经准备好了,可以读取;
考虑到成千上万的client,所以每个client对应一个进程或线程不现实,然后就出来epoll模型。但是对于内核来讲所做的通知工作没有改变,都是通过sock->sk_sleep,然后wakeup实现;所以只是表现出来的形式有所变化,但是涉及内容实在不多;
再看epoll模型,建议有兴趣的兄弟先看看select.c中普通poll的实现方式,否则可能会有点看糊涂;poll的方式就是把需要通知的多个fd挂到sk_sleep的等待队列wait queue上,再利用内核wakeup时有个回调func的功能实现的,然后eventpoll 会利用func的功能多些。
eventpoll看起来通过一个独立的文件系统实现的,不过不用看到文件系统感觉太内核,其实linux除了(ext2,3)其他严格讲不叫文件系统,称文件系统类型的接口比较合适,内核其实只有一种文件系统,其他都是扩充;就像eventpollfs提供了用户层和内核层的一个接口;
所以socket服务做得好,如果不满足于epoll,可以建自己的接口文件系统,再不满足可以改tcp/udp对sock的管理部分代码,如果有自己在处理逻辑,就该协议;应该讲协议栈不难,而且相对独立,不过内核相关代码的难度还在对内核和体系结构的熟悉程度,不然做不了这个事;但是内核编程还是能做高端的事,也能赚钱;

论坛徽章:
0
2 [报告]
发表于 2010-02-15 17:04 |只看该作者
呵呵,顶一下,偶之前也有修改Socket,做过一段,单纯作为应用的话不建议,还是和科研结合起来做点东西

论坛徽章:
0
3 [报告]
发表于 2010-02-27 13:06 |只看该作者
不必去联系国内的学术,应该已经有单位在做一些相关的事了

论坛徽章:
0
4 [报告]
发表于 2010-02-27 14:26 |只看该作者
写得很好,很有逻辑性!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP