项目地址为:github地址
1 框架目标
做一个典型应用场景下的服务器框架,这里所谓的典型指的是:
- 中度规模的并发量
- 客户端和服务器之间以自定义协议包进行交互
- 关心接口而非连接处理
2 所采用的组件库或技术
框架主要使用了下述的内容
- libevent
- multi-thread
- protobuf-c
使用libevent解决连接问题,内部实现了一个队列+多线程池的结构,将可以触发的连接放入队列中,线程池中的线程通过竞争来获取连接,进而进行连接的处理。同时,框架使用了protobuf的C语言版本来进行数据对象的序列化,但是由于本框架使用的是tcp连接,可能会出现粘包等问题,因此,在每个proto包之前加了一个4字节的头来标志包的大小,在接收端处理时,同样,先读取4个字节,获得包大小,在根据包的大小获得数据包,进行proto解码操作,进而获得包内容。
3 框架的使用
根据上述的分析,框架的使用也可以分为下述几个部分:
- 定义cs包
在框架中的proto文件夹下,已经有实例,目前只需要加入想要的包的定义,并在主cs message中添加该message类型。 - 声明和实现数据包的处理函数
在框架中的src下的asf_op.h/c这两个文件是处理函数集合,可以通过添加所需的包处理函数,来完成自定义的消息处理。 - 线程主操作中对应其处理关系
在框架中的server.c主程序中,server_job_function是任务处理函数,在其中的switch中增加case即可实现对应。
4 改良方向
上述内容在网络之上,建立了一个基于包的通信方式,但是对应用层的数据的处理不足描述不足。
另外需要丰富的还有客户端的表现形式,web,app等。
希望和大家一起探讨学习。