synapse (http://synapse.ararat.cz/doku.php)的源码简洁明了,属于轻量级的阻塞式socket通讯组件包,更多的功能需要自己基于它的基础上去封装实现。相对于indy(阻塞)和ics(非阻塞/阻塞)来说,我更喜欢synapse的原生和纯粹,因此对其进行了简单的学习和总结。
在着手学习synapse之前,有必要先对常见的服务器模型做下回顾,这对接下来解读synapse代码非常有帮助。
在目前的网络应用中,大多数是一个服务端对应多个客户端的联网方式,那么我就着重分析一下这种情景下服务器模型:
分类:
- 循环服务器:服务器在同一时刻只能响应一个客户端的请求;
- 并发服务器:服务器在同一时刻可以响应多个客户端的请求。
原理及模型:
- TCP循环服务器
TCP循环服务器一次只能处理一个客户端的请求,只有在这个客户的所有请求满足后,服务器才可以继续后面的请求。如果有一个客户端占住服务器不放时,其它的客户机都不能工作了,因此,TCP服务器一般很少用循环服务器模型的。
其模型为:
1 2 3 4 5 6 7 8 9 |
|
- TCP并发服务器
TCP并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。
其模型为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
- UDP循环服务器
UDP循环服务器每次从套接字上读取一个客户端的请求->处理->然后将结果返回给客户机,因为UDP是非面向连接的,没有一个客户端可以老是占住服务端。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够满足。
其模型为:
1 2 3 4 5 6 7 8 |
|
- UDP并发服务器
人们把并发的概念用于UDP就得到了并发UDP服务器模型. 并发UDP服务器模型其实是简单的.和并发的TCP服务器模型一样是创建一个子进程来处理的 算法和并发的TCP模型一样,除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种模型。
其模型为:
1 2 3 4 5 6 7 8 9 10 11 |
|
转载请注明:梧桐树下 » synapse socket总结一:服务器模型
http://www.pfeng.org/archives/449