中国开发网: 论坛: 程序员情感CBD: 贴子 366322
haitao
【抛砖引玉】关于socket的服务端的机制的讨论
完成端口之类的高性能机制,应该是用在服务端的吧,客户端要求再高,也是一个人
服务端同时响应很多客户端的请求,性能要求很苟刻。

先不考虑性能,描述一下服务端的工作模式:
服务器的一个端口,同时可以有很多客户端(不同的ip:port)连着
每个对方都随时有数据发过来或接受服务器响应模块发出去的数据

服务端为每个对方都建立一个socket,服务器要发,应该直接通过这个socket写就行了
--是不是每个socket都有自己独立的发送缓冲?服务模块只要把要发的数据放到这个缓冲,就行了?

接收复杂一点:每个socket随时都可能有一个或多个数据块到达
--是不是每个socket都有自己独立的发送缓冲?
如果每次的到达都能先被取出存放在消息队列(对方ip+port+递增序号+大小+具体数据)
响应模块取对应ip+port的数据时,把目前消息队列里所有该ip+port的数据包都按顺序取最先的指定字节交给收取者,同时在消息队列里清除这些字节的消息(如有包只有前面一部分被取走,则清除时不删除该包,而是把该包缩小为剩下的字节)

这样的机制应该最清楚的了,但是效率就比较低了
要高效率,数据包的搬移次数要做的最小
上面的机制,网络到达的数据包,先从socket的接收缓冲移到消息队列,再从消息队列移动到响应模块的处理变量。。。
--完成端口不知道省掉了哪些环节

要效率最高,干脆把接收缓冲做成消息队列一样可以管理的,同时可以把“消息块”结构的起址直接给响应模块。。。。
我的blog:http://szhaitao.blog.hexun.com & http://www.hoolee.com/user/haitao
--以上均为泛泛之谈--
不尽牛人滚滚来,无边硬伤纷纷现 人在江湖(出来的),哪能不挨刀(总归是要的)
网络对话,歧义纷生;你以为明白了对方的话,其实呢?

您所在的IP暂时不能使用低版本的QQ,请到:http://im.qq.com/下载安装最新版的QQ,感谢您对QQ的支持和使用

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录