您的位置:首页 > 编程语言 > C语言/C++

多线程游戏服务器开发(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 这是一个初步实现的代码,以后将围绕这些代码进行介绍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  服务器 asio C++11