前言

游戏即将上线,本周对广播服进行压力测试,不断调整代码,最终达成了单进程2000人的目标。一些注意事项和大家分享下。

服务端策略

采用集群方式,单进程连接数量控制在2000人

  1. 获取连接数量 js wss.clients.size;
  2. 当连接数达到2000人时,服务端断开客户端并返回错误码。 js wsClient.close(1008, 'connector num max');
  3. 连接但5秒内不完成登录验证的客户端要关闭

同一个频道玩家集中在同一个进程

  1. 连接端口作为数组返回给客户端
  2. 客户端从第一个端口轮询请求可以连接的服务端,直到连接成功。

减少RPC操作,提升通信效率,虽然策略有点低级。

广播相关

  1. 消息广播区域分级,频道内、进程内,当前服,所有服
  2. 不同广播区域需要不同的权限,所有服不对客户端开放。
  3. 不同广播区域的消息冷却时间不同。

消息相关

  1. 精简消息内容,删除消息内无用数据,尤其优化通讯频繁的消息。
  2. 心跳时间频率适当降低,调整为10秒一次。
  3. 心跳信息不打印。

日志

  1. 打印接收的消息
  2. 打印一些重要日志
  3. 不打印发送给客户端的消息

适当降低日志,能提升服务端承载能力。

机器人策略

  1. 每0.5s创建一个机器人进程
  2. 登录聊天服务器
  3. 10s一次心跳
  4. 30s一次玩家状态同步
  5. 35s一次世界聊天(频道内200人广播)
  6. 90s一次随机推荐好友(进程内随机)
  7. 120s一次房间招人(当前进程内所有人广播)
  8. 聊天关闭则从步骤2重新开始

测试策略

  1. 采用和线上同样的环境测试。
  2. 短期测试可按小时、天来申请服务器测试。
  3. 受网络限制,测试机器人和服务器之间内网通信。