多线程游戏服务器开发(1)-简介

准备工作

随着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 这是一个初步实现的代码,以后将围绕这些代码进行介绍。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值