c++ 百万在线

从走路说起

走路的五个步骤

  1. 角色A 移动
  2. 客户端A向服务器发送新的坐标信息(或方向指令)
  3. 服务端处理消息
  4. 服务端将角色A的新坐标转发给客户端B
  5. 客户端B收到消息并更新A的位置

五个阶段

  1. 连接 网络连接
  2. 登录中 账户校验 加载数据
  3. 游戏中 交互操作
  4. 登出中 保存数据
  5. 退出 登出

N + 1 个 socket 结构
n 为客户端的连接数 1个为服务端打开监听的套接字

Sknet 是c 和lua 语言编写的

单线程 事件模型 Reactor模式

多数小游戏 都是日活 3-5千 每天登录的人数 最多1000人同时在线
3秒一个操作 处理一条消息 2毫秒

1核 1000
8核 8000

分布式
聊天服务器 其实是转发服务器 接收到场景服务器发来的消息广播给所有场景服务器
让场景服务器(走路)连接聊天服务器 对于用户是服务端 对于聊天服务器是客户端 接收到聊天服务器 的数据后转发给用户

一致性问题
连接不稳定 需要处理好断线后的重连
断线期间的消息重发 断线后 进程间的状态不一致问题
需要给每个交易赋予唯一编号,

一张地图的极限

如何让一张图能支撑几千万的玩家
一般一个场景只能支持几十名玩家呢?
一般消息 延迟几毫米不重要
帧同步 对消息即时性要求很高

万物皆可 Actor

Actor并发模型 ,每个Actor互相隔离, 通过消息通信
著名的Skynet 就是Actor模型框架,常用来当游戏服务端引擎
每个actor 携带一个信箱 向其他actor 寄信,具体反应 处理取决于 收到信的actor

Erlang 和 Skynet 通过内部处理 让每个actor 都是轻量的

skynet入门

yum install -y git gcc autoconf readline-devel
git clone https://github.com/cloudwu/skynet.git

cd skynet

make linux #会下载第三方库 jemalloc 然后编译

案例

gateway

c++

visaul stiudio

2024-10-11 15:06:04

c++

qtCreator快捷键

2024-10-17 10:11:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索