synapse socket总结一:服务器模型

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
socket(...);
bind(...);
listen(...);
while(1)
{
   accept(...);
   process(...);
   close(...);
}
  • TCP并发服务器

TCP并发服务器的思想是每一个客户机的请求并不由服务器直接处理,而是由服务器创建一个子进程来处理。
其模型为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
socket(...);
bind(...);
listen(...);
while(1)
{
   accpet(...);
   if(fork(...) == 0)
   {
    process(...);
    close(...);
    exit(...);
   }
   close(...);
}
  • UDP循环服务器

UDP循环服务器每次从套接字上读取一个客户端的请求->处理->然后将结果返回给客户机,因为UDP是非面向连接的,没有一个客户端可以老是占住服务端。只要处理过程不是死循环,服务器对于每一个客户机的请求总是能够满足。
其模型为:

1
2
3
4
5
6
7
8
socket(...);
bind(...);
while(1)
{
   recvfrom(...);
   process(...);
   sendto(...);
}
  • UDP并发服务器

人们把并发的概念用于UDP就得到了并发UDP服务器模型. 并发UDP服务器模型其实是简单的.和并发的TCP服务器模型一样是创建一个子进程来处理的 算法和并发的TCP模型一样,除非服务器在处理客户端的请求所用的时间比较长以外,人们实际上很少用这种模型。
其模型为:

1
2
3
4
5
6
7
8
9
10
11
socket(...);//创建一个数据报类型的套接字
bind(...);//绑定公认的短口号
while(1)//开始接收客户端的连接
{                    
    recvfrom(...); //接收和处理客户端的UDP数据报
    if(fork(...)==0)//创建子进程
    {
        process(...);
        sendto(...);
    }
}

转载请注明:梧桐树下 » synapse socket总结一:服务器模型

http://www.pfeng.org/archives/449

posted @ 2016-01-08 01:05  findumars  Views(599)  Comments(0Edit  收藏  举报