spserver 开源服务器框架研究与分析
2016-07-25 06:32
555 查看
网上开源的C/C++服务器框架 还是比较少的。 最近研究了 spserver , 里面用了较多的设计模式,使用设计模式的目的是把不变的东西和可变的东西分离并且封装起来,避免以后修改代码, 应用设计模式的书里面讲的就是 “对修改关闭,对扩展开放”,但是滥用设计模式会把简单的问题复杂话了。
spserver代码量比较少,比较容易看懂,如果只是做一个简单的echo服务器的话,spserver 可以给新手一个快速搭建服务器的框架。
用vld测试后, 发现spserver有很多内存泄露的地方。并且 msgqueue_destroy 函数会造成线程阻塞,程序无法正常结束。
spserver 里面的半同步半异步模式相当于 主线程负责所有的数据收发, 工作者线程负责逻辑。 主线程与工作者线程之间通过消息队列进行通信。主线程收到数据后,通知工作者线程,有数据,工作者线程进行报文解析与处理, 把要发送的数据放入队列,然后通知主线程,有数据了, 你去发送把。
这种模型可以应对逻辑复杂, 处理时间长, 需要发送和接收的数据比较少的情况比较合适。但是如果是需要处理类似文件服务器这样,IO的数据很多,但是逻辑很简单的服务器,则不合适, 主线程会成为瓶颈,也即是说IO会成为瓶颈。
另外是spserver 没有实现 作为客户端连接其他服务器的代码,需要用户自己实现连接到其他服务器的情况。
我现在正在封装一个开源的服务器框架,这个框架会比spserver更通用,范围更广,会根据游戏服务器的系统架构封装一套比较完整的实现, 从数据库代理服务器,登录服务器,大厅服务器,游戏服务器, 网关服务器等进行框架的处理。
http://blog.csdn.net/langeldep/article/details/5607110
spserver代码量比较少,比较容易看懂,如果只是做一个简单的echo服务器的话,spserver 可以给新手一个快速搭建服务器的框架。
用vld测试后, 发现spserver有很多内存泄露的地方。并且 msgqueue_destroy 函数会造成线程阻塞,程序无法正常结束。
spserver 里面的半同步半异步模式相当于 主线程负责所有的数据收发, 工作者线程负责逻辑。 主线程与工作者线程之间通过消息队列进行通信。主线程收到数据后,通知工作者线程,有数据,工作者线程进行报文解析与处理, 把要发送的数据放入队列,然后通知主线程,有数据了, 你去发送把。
这种模型可以应对逻辑复杂, 处理时间长, 需要发送和接收的数据比较少的情况比较合适。但是如果是需要处理类似文件服务器这样,IO的数据很多,但是逻辑很简单的服务器,则不合适, 主线程会成为瓶颈,也即是说IO会成为瓶颈。
另外是spserver 没有实现 作为客户端连接其他服务器的代码,需要用户自己实现连接到其他服务器的情况。
我现在正在封装一个开源的服务器框架,这个框架会比spserver更通用,范围更广,会根据游戏服务器的系统架构封装一套比较完整的实现, 从数据库代理服务器,登录服务器,大厅服务器,游戏服务器, 网关服务器等进行框架的处理。
http://blog.csdn.net/langeldep/article/details/5607110
相关文章推荐
- 分布式文件系统glusterfs安装步骤
- OpenJ_Bailian 2755 神奇的口袋
- Ceph:一个开源的 Linux PB 级分布式文件系统
- shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
- fuse 虚拟文件系统 的 安装与使用
- 222. Count Complete Tree Nodes
- Mysql 插入记录时检查记录是否已经存在,存在则更新,不存在则插入记录SQL
- 最基础的绑定服务步骤
- 如何成为一个牛逼的C/C++程序员?
- DLNA架构在机顶盒上播放云存储文件的实现
- 数据库SQL 优化
- 169. Majority Element && 229. Majority Element II
- 分布式文件系统 Mogilefs 安装步骤
- 开源分布式文件系统比较
- 分布式文件系统 fastDFS 安装步骤
- 分布式文件系统MooseFS安装步骤
- 源码编译安装 PHP5.5.0,解决curl_exec访问HTTPS返回502错误的问题(修改PATH路径)
- 48. Rotate Image
- TensorLayer : 最新深度学习与增强学习库
- test