• 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服务器则从队列头开始,不断将数据取出,并发送出去。选用共享内存的方法实现管道,还是比较合适的,效率上比较高。

  • 相关阅读:
    vue下使用echarts折线图及其横坐标拖拽功能
    vue下登录页背景图上下空白处自适应等高
    前端面试总结下~
    在C#中使用科大讯飞Web API进行语音合成
    C# Socket 发送&接收&返回
    AutoMapper在C#中的有趣应用
    RabbitMQ 在 C# 中简单应用
    .Net Core 读取配置文件
    C# / .Net Core 访问MongoDb库
    C#发送GET与POST请求
  • 原文地址:https://www.cnblogs.com/fox7nights/p/2558893.html
Copyright © 2020-2023  润新知