Multiserver游戏服务器Demo[C++&Lua]
代码参考
代码文件参考下述详解的类图,工程参考第零章工程说明
关键特性
- 对Socket库进行封装,抹平Socket的Window&Linux的平台差异。
- C++嵌入lua脚本,增加开发者编码效率,减少编译时间消耗。
- 非阻塞网络IO
- 多线程任务模型
- 多服务模型
详解
Socket库封装

主要是对C++的Socket库进行封装,使其更加易用,抹平window和linux平台差异
- SocketMgr:Socket模块的门面(外观模式),提供TCPSocket、UDPSocket的创建接口以及Select多描述符非阻塞IO的封装
- TCPSocket:TCP长连接Socket的connect、bind、listen等等接口的封装
- UDPSocket:UDP短连接Socket的封装,同上。
- SocketAddress:Socket地址信息IP地址、端口等封装
- SocketAddressFactory:简单工厂,封装创建SocketAddress细节
服务器引擎

- Engine:整个程序的主循环,管理线程Worker和Service,负责Worker、Service、Msg的处理调度。
- Service:包含处理基础消方法息由Worker更新处理,其多态体现其的lua对象中
- ConnWriter:网络消息写入器
- WriteObj:消息写入上下文
- Worker:工作线程的封装,处理Service的消息
- SocketWorker:网络消息线程,读写网络消息
- Conn:保存连接描述符等信息
- Msg:消息基类,驱动Service的逻辑更新
- SocketRWMsg:Socket可读可写(其中一个或者全部)时通知。
- SocketAcceptMsg:Socket建立连接时通知。
- ServiceMsg:其他服务消息通知。
- LuaAPI:向Lua虚拟机注入C++方法
消息处理模型时序图

注意事件的分发推入和消息的处理不是连续的。消息进来后尝试唤醒线程,线程更新时处理消息。具体逻辑代码参考
- 消息进来:Engine.Send
- 消息处理:Worker的()运算符重载方法
多服务

服务的多态使用lua编写,开发效率较高。每个服务可能开多个:例如login可以建立多个服务,处理逻辑时可以使用随机分配一个等策略以实现均衡负载。
- gate(Service):负责隔离客户端和服务,客户端和服务之间的消息由gate转发,同是统一编码解码
- MsgProcesser:编码器
- Config:服务配置文件,查询服务的id以通信。
- LoginService...:具体的业务服务
其他
- C++ 实现锁机制,linux平台自带锁的库文件,但windows貌似没有,为了抹平这部分平台差异,选择自己开发,包含:
- SpinLock 自旋锁
- RWLock 读写锁
Multiserver游戏服务器Demo[C++&Lua]的更多相关文章
- Scut游戏服务器免费开源框架-3
Scut游戏服务器免费开源框架--快速开发(3) Scut快速开发(3) 1 开发环境 需要安装的软件 a) 消息队列 b) 数据库,Sql2005以上版本 ...
- unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计
unity3d + photon + grpc + nodejs + postgis/postgresql 游戏服务器设计 最近做玩票性质的游戏项目,客户端技术是 unity3d 和 android. ...
- 使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?(非常稳定、捕获所有异常、非常适合从头开始,但大公司已经有现成的C++框架、所以不会使用)
使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?和C Socket服务器比起来有什么优劣?可行性怎么样? 从2013年起,经朋友推荐开始用Golang编写游戏登陆服务器, 配合C++做第三方 ...
- 学习游戏服务器开发必看,C++游戏服务器开发常用工具介绍
C++游戏服务器开发常用工具介绍 在软件开发过程中需要使用的工具类型实属众多,从需求建模到软件测试,从代码编译到工程管理,这些工具都对项目有着不可替代的作用.庄子有云,"吾生也有涯,而知也无 ...
- 深入浅出node.js游戏服务器开发1——基础架构与框架介绍
2013年04月19日 14:09:37 MJiao 阅读数:4614 深入浅出node.js游戏服务器开发1——基础架构与框架介绍 游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...
- 游戏服务器菜鸟之C#初探一游戏服务
本人80后程序猿一枚,原来搞过C++/Java/C#,因为工作原因最后选择一直从事C#开发,因为读书时候对游戏一直比较感兴趣,机缘巧合公司做一个手游的项目,我就开始游戏服务器的折腾之旅. 游戏的构架是 ...
- 游戏服务器菜鸟之C#初探四游戏服务
经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...
- Redis在游戏服务器中的应用
排行榜游戏服务器中涉及到很多排行信息,比如玩家等级排名.金钱排名.战斗力排名等.一般情况下仅需要取排名的前N名就可以了,这时可以利用数据库的排序功能,或者自己维护一个元素数量有限的top集合.但是有时 ...
- c++游戏服务器编程学习笔记(一)TCP/IP
1. c++游戏服务器编程c++运行效率非常高2. TCP传输控制协议IP网际协议Socket 3.Linux 乌班图开源第三方库BOOST 4.80%游戏服务器端用C++工作量最大的地方是具体的游戏 ...
- 游戏服务器ID生成器组件
游戏服务器程序中,经常需要生成全局的唯一ID号,这个功能很常用,本文将介绍一种通用ID生成组件.游戏服务器程序中使用此组件的场景有: 创建角色时,为其分配唯一ID 创建物品时,每个物品需要唯一ID 创 ...
随机推荐
- 基于声网 Flutter SDK 实现互动直播
前言 互动直播是实现很多热门场景的基础,例如直播带货.秀场直播,还有类似抖音的直播 PK等.本文是由声网社区的开发者"小猿"撰写的Flutter基础教程系列中的第二篇,他将带着大家 ...
- SpringBoot——模板引擎及原理
更多内容,前往IT-BLOG 一.模板引擎的思想 模板是为了将显示与数据分离,模板技术多种多样,但其本质都是将模板文件和数据通过模板引擎生成最终的 HTML代码. 二.SpringBoot模板引擎 S ...
- 自己动手从零写桌面操作系统GrapeOS系列教程——24.加载并运行loader
学习操作系统原理最好的方法是自己写一个简单的操作系统. 之前我们在电脑的启动过程中介绍过boot程序的主要任务就是加载并运行loader程序,本讲我们就来实现. 本讲代码文件共2个: boot.asm ...
- Thinkpad T14升级Windows11ver22h2失败问题解决小记
背景 手头的ThinkPad在近一年的时间里每次升级Windows 11的22h2版本每次都会报错,具体有以下几种情况: 更新过程中无问题,重启后黑屏更新过程中会卡在26%左右,然后蓝屏报KENERA ...
- XXL-Job与Elastic-Job详细对比
1. 失败处理策略 失败处理策略 XXL-Job Elastic-Job 失败重试 支持,最多重试三次.重试时间间隔可配置. 支持,最多重试十次.重试时间间隔可配置. 失败告警 支持,可配置告警接收人 ...
- AF_XDP技术简介
本文分享自天翼云开发者社区@<AF_XDP技术简介>,作者: l****n 一.概述 AF_XDP 是一项新增的,针对高性能数据包处理进行优化的地址族协议.本文档假设读者已经熟悉 BPF ...
- SpringBoot 缓存注解的使用
最近比较忙,没时间更新了.上一篇文章我说了如何使用Redis做缓存,文末我稍微提到了SpringBoot对缓存的支持.本篇文章就针对SpringBoot说一下如何使用. 1.SpringBoot对缓存 ...
- day9:文件相关操作&文件扩展模式&文件相关函数
文件的操作 # 文件的写入 # 1.打开文件 fp = open("ceshi1.txt",mode="w",encoding="utf-8" ...
- PHP的WAMP的安装
WAMP独立安装 软件官网下载: Apache:http://httpd.apache.org/download.cgi MySQL:http://dev.mysql.com/downloads/ P ...
- fio性能测试-环境搭建,功能介绍,测试讲解
fio性能测试-环境搭建,功能介绍,测试讲解 Fio介绍:FIO(Flexible I/O Tester)是一个用于测试磁盘.文件系统.块设备和网络设备性能的工具.它可以模拟不同类型的I/O负载,包括 ...