多线程游戏服务器开发(1)-简介
2016-07-11 16:09
267 查看
准备工作
随着C++11的普及,利用asio网络库可以更加轻松地编写跨平台的C++服务器。我的目标就是编写出一个轻量的多线程服务器框架。准备
visual studio 2015 社区版 这个版本对C++11支持比较全面asio 这是从boost库剥离出来的跨平台网络库,使用支持C++11的编译器可以完全不再依赖boost库
google protobuf 支持多种语言的数据序列化库
框架介绍
actor_manger
模块管理器,可以代表一个独立的进程,或者单独的机器。用一个8位整型的machine id标识,也就是说最多可以有255 个模块管理器(可以是相同机器的不同进程, 也可以是不同的机器)。
1.负责模块的创建与销毁
。
2.负责模块的线程资源分配,一旦把模块分配到工作线程,将不能在改变。
3.模块间消息通信桥梁。
worker
工作者线程,负责驱动这个worker中的所有模块处理消息。用一个8位整型的worker id标识,一个actor_manger中可以有255个worker线程。worker 消息循环: 遍历其中的模块,把消息队列长度大于0的模块,保存到一个队列 ActorQueue 中。然后遍历ActorQueue,每次取出一个模块 Module ,并处理Module的消息队列队首的一条消息,如果Module的消息队列长度依然大于0, 则把Module 插入 ActorQueue 的队尾, 直到所有模块的消息队列长度为0。
actor
模块的基类,每个模块都有一个独立的消息队列。同一个模块中的所有操作都是线程安全的,不同模块间通信可以通过发送message。(游戏中可以有 登录模块,数据库模块,世界模块,场景模块等等)
。broker 继承actor, 实现了一个带网络通信的模块
。
初步实现
https://github.com/sniper00/moon_net 这是一个初步实现的代码,以后将围绕这些代码进行介绍。相关文章推荐
- 小心服务器内存居高不下的元凶--WebAPI服务
- 运维入门
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 利用开源软件打造自己的全功能远程工具
- Linux5.9无人值守安装
- 数据中心和云未来的十二大趋势
- 虚拟化基础架构Windows 2008篇之11-WSUS服务器的安装与配置
- 用vsftp快速搭建ftp服务器
- Linux快速构建apache web服务器
- 服务器监控策略浅谈
- 如何降低服务器采购成本 原理分析
- 建议的服务器分区办法
- 服务器托管六大优势分析
- Erlang实现的一个Web服务器代码实例
- 服务器技术全面解析
- 保护DNS服务器的几点方法小结
- 我国成为全球第二大服务器消费国
- 服务器 安全检查要点[星外提供]
- 服务器应用自动重新启动IIS批处理[原创]_DOS/BAT_脚本之家