haitao:
【抛砖引玉】关于socket的服务端的机制的讨论
[阅读: 385] 2006-07-27 16:09:44
完成端口之类的高性能机制,应该是用在服务端的吧,客户端要求再高,也是一个人
服务端同时响应很多客户端的请求,性能要求很苟刻。
先不考虑性能,描述一下服务端的工作模式:
服务器的一个端口,同时可以有很多客户端(不同的ip:port)连着
每个对方都随时有数据发过来或接受服务器响应模块发出去的数据
服务端为每个对方都建立一个socket,服务器要发,应该直接通过这个socket写就行了
--是不是每个socket都有自己独立的发送缓冲?服务模块只要把要发的数据放到这个缓冲,就行了?
接收复杂一点:每个socket随时都可能有一个或多个数据块到达
--是不是每个socket都有自己独立的发送缓冲?
如果每次的到达都能先被取出存放在消息队列(对方ip+port+递增序号+大小+具体数据)
响应模块取对应ip+port的数据时,把目前消息队列里所有该ip+port的数据包都按顺序取最先的指定字节交给收取者,同时在消息队列里清除这些字节的消息(如有包只有前面一部分被取走,则清除时不删除该包,而是把该包缩小为剩下的字节)
这样的机制应该最清楚的了,但是效率就比较低了
要高效率,数据包的搬移次数要做的最小
上面的机制,网络到达的数据包,先从socket的接收缓冲移到消息队列,再从消息队列移动到响应模块的处理变量。。。
--完成端口不知道省掉了哪些环节
要效率最高,干脆把接收缓冲做成消息队列一样可以管理的,同时可以把“消息块”结构的起址直接给响应模块。。。。