免费注册 查看新帖 |

Chinaunix

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

对我来说难啊,linux中进行TCP/IP通讯设计 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-10 00:21 |只看该作者 |倒序浏览
对我来说难啊,linux中进行TCP/IP通讯设计

背景是这样的,我们的客户需要在linux上布置一个比较基本的通讯程序,需要支持常见的TCP/IP 长连接(单进单出或者双进双出)和短链接,进行交易报文的转换和接受与分发。需要实现如下功能:
1)需要能够启动和关闭不同的service,彼此不能影响,每个service需要可以自由的热插拔
2)可以控制每个 service下的并发的进程/线程的数量,可以随时调整进程数配置,最好即时生效
3)可以控每个service 所占用的资源,例如带宽和CPU资源等(这个我觉得最难)
4)支持超时和消息触发,支持定时器式的idle报文的自动发送。

我的老天,这些有些都是中间件的功能,尤其是第三点,我觉得除了阿帕奇和iis之外,好像还没有看到谁能实现(好像这些都是硬件才能控制的),请哪位有经验的同学指点一下:
1)学会这些需要哪些基本的知识
2)如果要实现以上的目标,有哪思路或者方法啊。

一躬到底,谢谢!

论坛徽章:
0
2 [报告]
发表于 2009-03-13 09:28 |只看该作者
自己顶

论坛徽章:
0
3 [报告]
发表于 2009-03-13 11:42 |只看该作者
原帖由 chinadominate 于 2009-3-10 00:21 发表
对我来说难啊,linux中进行TCP/IP通讯设计

背景是这样的,我们的客户需要在linux上布置一个比较基本的通讯程序,需要支持常见的TCP/IP 长连接(单进单出或者双进双出)和短链接,进行交易报文的转换和接受与 ...


个人拙见:
原帖由 chinadominate 于 2009-3-10 00:21 发表
1)需要能够启动和关闭不同的service,彼此不能影响,每个service需要可以自由的热插拔

将不同的service设计为不同的so或者独立的可执行文件。然后写一个so或者写独立可执行程序的中央管理器。(中央管理器也可以双备,这样的话,中央管理器也可以热插拔)
原帖由 chinadominate 于 2009-3-10 00:21 发表
2)可以控制每个 service下的并发的进程/线程的数量,可以随时调整进程数配置,最好即时生效

写进程池/线城池或进程管理器/线程管理器。减少进程/线程数目的话,即时生效不可能,只能是尽可能即时。最简单的,比如你现在有4000线程,全部被hold住了。如果你想将其调整到2000线程,如果不打算强制结束线程(这样会有潜在的不安全因素)的话,那就只有等到hold住的线程解除hold状态后,才有可能自行撤销。而从调整开始,到hold状态解除,是需要时间的,说已不可能即时。除非全部使用异步机制(而且释放异步行为不需要等待(等待其实就是把相关的行为hold住了)),而且需要频繁检查取消点。但频繁检查取消点很耗资源。所以一般是执行一段之后,才检查一次。但这样,入股噢本段没有执行完,还未到撤消点时,不可能即时撤销当前线程/进程。
但增加数目的话,可以做到即时。
原帖由 chinadominate 于 2009-3-10 00:21 发表
3)可以控每个service 所占用的资源,例如带宽和CPU资源等(这个我觉得最难)

最简单的,计算操作耗时。譬如,要求带宽10k/s, CPU 30%,那假如我发送10k数据耗时0.02秒,那就休眠0.98秒再进行下次发送。CPU类推。可以参考微软面试,让人物管理器显示正弦曲线的例子。
不过上面这个方法精度有限,但很简单。
原帖由 chinadominate 于 2009-3-10 00:21 发表
4)支持超时和消息触发,支持定时器式的idle报文的自动发送。

超时很好办吧?select或者定时检查来处理。消息触发的话,最简单的,将epoll/kqueue/IOCP的触发事件处理后发送通知就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP