七夜狐

博客园 首页 新随笔 联系 订阅 管理

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

posted on 2012-06-22 19:45  七夜狐  阅读(324)  评论(0编辑  收藏  举报