传奇开区登录时好时坏注册也失败排查

来源: 作者: 点击:
你不是单机了,是服务器商开区,玩家批量进不来、注册有时成功有时失败,这种问题基本不在客户端,而在网关承载、列表服务、数据库写入、网络抖动、被扫被攻击这几层。单机能登和开区能扛人,是两回事。

一、登录时好时坏最先看:LoginGate / RunGate 撑不住
开区默认单 LoginGate、单 RunGate,几十人并发就排队,上百人就丢包。
表现就是:
• 列表能出

• 点区有时能进,有时卡“连接服务器”

- 高峰期注册没反应,低峰能注册
• 同个账号第一次登失败,重试点又进去了

处理:
• LoginGate 起 2-4 个,前面用网关调度或不同端口分组

• RunGate 起 2-4 个,M2 里“游戏网关”配多线

• 单进程老 EXE 别硬扛,Hero/GOM 端看有没有多网关配置,GEE 端走集群网关更稳

• 云机 2 核 4G 开百人区就是找死,百人起步 4 核 8G,千人区 8 核 16G 起

二、注册失败:网站/接口和数据库两头查
注册一般走网站 register.php / api/register,不是 M2 直接建号。
玩家注册不了但偶尔能成,常见:
1. 网站用的 MySQL 连接数满
max_connections 默认 151,开区瞬间被列表接口、登录查询、注册、后台一起打满,新连接直接拒。
改 my.cnf:max_connections=1000,wait_timeout=60,交互/非交互超时别留 28800。
2. 注册接口没加锁/没防重,刷注册把 account 表锁死
老 PHP 注册脚本一条 INSERT 没捕获异常,玩家连点,表锁等待,后面全卡住。
3. 列表接口和注册接口放同一个弱鸡站点
PHPStudy 默认配置、thinkphp 老版本、没开 opcache,50 人同时点就 502。
把列表接口、注册接口、支付回调拆开,列表用纯静态 txt,别用 PHP 动态生成列表。
4. 磁盘满了 / 数据库表坏了
开区几天 data 目录暴增,磁盘 100%,InnoDB 写不进,注册全失败。
df -h 看盘,optimize table account 修表。
5. DBC 类 Hero 端注册走 LoginSrv
LoginSrv 没起第二份、账号表 HeroDB::Account 被别的进程锁,就时好时坏。DBC 老架构本来不适合高并发,开区量大建议换 MySQL 类端。

三、列表服务不稳定
很多开区商把 list.txt 放自己官网根目录,官网一卡,玩家就“列表为空/连接失败/时好时坏”。
正解:
• 列表用纯文本静态文件,别用后台动态输出

• 列表放 CDN / 对象存储 / 不同 IP 的小机,别和游戏服同机

- 主列表挂了还有备用列表,但备用列表也放同机就没意义
• 列表格式 ANSI,GEE 多段、GOM 单段,写错一个字符,部分玩家能解析部分不能

四、家宽/低防被扫,登录就像抽风
家开区没高防,别人拿扫描器扫 7000/7200/3306,或者同行 CC 一下登录接口:
- 低峰正常
• 晚上 8 点开始一半人登不上

• 注册接口 502/超时

• M2 没红字,但 Gate 窗口疯狂刷连接

处理:
• 3306 绝不公网开

• 7000/7100/7200 只放行给高防转发,不直接暴露源 IP

• 登录接口加令牌/限频,1 个 IP 每秒最多 3 次

• 源站 IP 别暴露,玩家只连高防 IP

• 家宽开区被运营商扫到 80/8080 被封,列表直接挂

五、M2 和 LoginSrv 配置坑
• !addrtable.txt 里公网 IP、内网 IP、网关 IP 写混,部分玩家路由能通部分不通

• M2 里“允许相同 IP 多开”没开,网吧/合租宽带一群人进不来

• 最大在线、最大账号、最大角色数设太小,到了数新号注册被拒

- 时区/系统时间跳,LoginSrv 鉴权时间戳错,部分端会随机拒登录
• 用了“动态域名”没做心跳,DNS 缓存一旧,部分省份玩家解析到死 IP

六、快速定位法
让玩家分三类反馈:
A 类:列表都看不到 → 列表服务/域名/DNS/防火墙
B 类:列表有、点区卡连接 → LoginGate/RunGate/端口/高防
C 类:能进到建角色、注册没反应 → 网站注册接口/MySQL/账号表

你后台看:
• netstat 看 7000/7200 是否大量 TIME_WAIT、SYN_RECV

- M2 日志有没有“网关断开/账号服务忙”
• Nginx/Apache 日志是不是 502、timeout、too many connections

• MySQL show processlist 是不是一堆 Locked / Waiting

• 云厂商流量图是不是 20:00 突刺、被 CC

七、开区商该有的最小架构
• 游戏服:M2 + DBServer + Gate 多进程

• 网站服:独立小机,纯静态列表 + 轻量注册接口

• 数据库:独立内网 MySQL,公网不暴露

• 高防:登录端口走高防转发,源站隐藏

• 列表:CDN/对象存储,别和游戏同 IP

• 支付:独立回调机,校验 orderid、金额、区服、角色,防伪造

• 监控:看 CPU、内存、连接数、MySQL 进程、Gate 丢包

八、注册有时成功有时失败,八成是这五个
1. MySQL 连接数满
2. 注册接口和列表同站被打
3. 磁盘满 / 表锁 / 表坏
4. LoginSrv 单进程扛注册
5. 同行 CC 登录和注册接口

九、临时救火
• 列表改成纯静态 txt,传对象存储

• 注册接口先关,开区前用 GM 批量建号发号,别让玩家自由注册

• Gate 加实例,M2 改多网关

• MySQL 提连接数、加慢查询日志

• 源站换 IP,新 IP 只给高防回源

• 家宽别开区,家宽能测版不能扛玩家

十、别再犯的错
• 游戏服、网站、数据库、列表全放一台 2 核机

• 3306 对公网开 root 空密码

• 列表用别人“免费列表平台”,人家宕机你全区登不上

• 登录器列表只填一个主地址,没备用

• 用破解端自带支付/注册,后台心跳回传别人服务器

• 开区前不压测,晚上高峰第一次见真实并发

开区登录时好时坏不是玄学:低峰能上说明链路通,高峰掉链说明承载/接口/网络抗不住。先把列表静态化、注册接口独立、Gate 多开、MySQL 提连接、源站藏高防后,再谈爆率活动和合区。玩家登不上是结果,前面每一层没分开,都会在这个结果上一起爆。