• linux下的一个网络服务器模型


    介绍一个linux下的网络服务器模型。

     

    系统架构

    将服务器程序分为两个服务器,即逻辑服务器和网络服务器(TcpServer)。逻辑服务器负责处理服务器需要处理的逻辑,而网络服务器仅处理网络的连接以及数据的收发。这两个服务程序是各自独立的,而不仅仅是属于不同进程。所以TcpServer的程序是可以直接应用于各个地方,而代码不需要改动。两个服务器之间,以共享内存或者管道等连接

    Logic Pipe TcpServer

    TcpServer Main类的数据结构

    Main类的主结构为一个大的数组,数组中存储着名为TcpInfo的结构。TcpInfo中存储着某个Tcp连接的SOKET,IP,端口,创建时间等,和一个用于存储来往数据的大buff数组。当客户端与TcpServer建立连接后,TcpServer将数组的下标作为数据收发的主键。

    管道数据结构

    管道实际是一个大的队列(可采用环形队列),不过这个队列的元素长度是不定长的。我们的每个队列元素,由以下成员组成:CodeHead,NetHead,实际数据。CodeHead中,存储长度信息,这样我们就能知道要操作的数据的长度,NetHead是网络数据信息,主要是TcpInfo数组下标。CodeHeadNetHead是定长的。

     

    CodeHead

    NetHead

    数据

    CodeHead

    NetHead

    数据

     

    TcpServer中共有两个管道,一个是逻辑服务器到客户端,一个是客户端到逻辑服务器。管道要存储队列头和队列尾两个信息。以S2C为例来说,逻辑服务器向客户端发信息时,将数据追加在队列尾部,而Tcp服务器则从队列头开始,不断将数据取出,并发送出去。选用共享内存的方法实现管道,还是比较合适的,效率上比较高。

  • 相关阅读:
    2020牛客暑期多校训练营(第一场)I 1or 2题解
    5-23ACM训练题解(NWERC 2019)
    5-20ACM训练题解(2017-2018 ACM-ICPC Pacific Northwest Regional Contest)
    5-6ACM训练题解(2019 Russia Team Open Contest)
    5-2ACM训练题解(Asia Nakhon Pathom Regional Contest)
    4-30ACM训练题解(ICPC Asia Taipei-Hsinchu Contest)
    4-22ACM训练题解(ZOJ Monthly Jan 2019)
    「学习笔记」子序列自动机
    「学习笔记」后缀自动机
    「学习笔记」后缀数组
  • 原文地址:https://www.cnblogs.com/fox7nights/p/2558893.html
Copyright © 2020-2023  润新知