zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    缓存小记
    ffplay源码分析(转)
    (转)Qt之QNetworkProxy(网络代理)
    pcm编码为aac后播放变快且模糊
    Qt常用控件(转)
    Qml(二)Quick基本组件
    QML(一)HelloWorld
    C++ MySQL连接及增删改查操作
    Linux ar打包静态库 plugin needed to handle lto object 问题
    Qt笔记(二)linux下Qt安装使用
  • 原文地址:https://www.cnblogs.com/findumars/p/5111803.html
Copyright © 2011-2022 走看看