轻量级的应用服务器基础框架

项目地址为:github地址

1 框架目标

做一个典型应用场景下的服务器框架,这里所谓的典型指的是:

  1. 中度规模的并发量
  2. 客户端和服务器之间以自定义协议包进行交互
  3. 关心接口而非连接处理

2 所采用的组件库或技术

框架主要使用了下述的内容

  1. libevent
  2. multi-thread
  3. protobuf-c

使用libevent解决连接问题,内部实现了一个队列+多线程池的结构,将可以触发的连接放入队列中,线程池中的线程通过竞争来获取连接,进而进行连接的处理。同时,框架使用了protobuf的C语言版本来进行数据对象的序列化,但是由于本框架使用的是tcp连接,可能会出现粘包等问题,因此,在每个proto包之前加了一个4字节的头来标志包的大小,在接收端处理时,同样,先读取4个字节,获得包大小,在根据包的大小获得数据包,进行proto解码操作,进而获得包内容。

3 框架的使用

根据上述的分析,框架的使用也可以分为下述几个部分:

  1. 定义cs包
    在框架中的proto文件夹下,已经有实例,目前只需要加入想要的包的定义,并在主cs message中添加该message类型。
  2. 声明和实现数据包的处理函数
    在框架中的src下的asf_op.h/c这两个文件是处理函数集合,可以通过添加所需的包处理函数,来完成自定义的消息处理。
  3. 线程主操作中对应其处理关系
    在框架中的server.c主程序中,server_job_function是任务处理函数,在其中的switch中增加case即可实现对应。

4 改良方向

上述内容在网络之上,建立了一个基于包的通信方式,但是对应用层的数据的处理不足描述不足。
另外需要丰富的还有客户端的表现形式,web,app等。
希望和大家一起探讨学习。

原文地址:https://www.cnblogs.com/nearmeng/p/4057958.html