传奇世界单机架设服务端与游戏网关反复失败重试报错原因和完整排查方案

来源: 作者: 点击:
传奇世界单机启动之后,服务端主程序和游戏网关一直显示失败重试,网关窗口不断刷新重试提示,无法建立稳定通信,这个故障和传奇系列GOM、GEE引擎的网关逻辑有明显区别,传奇世界的网关、引擎、数据库三者之间的握手校验项目更多,很多架设者只参考传奇的搭建经验,忽略专属配置项,反复启动依旧持续重试。
先区分日志里的重试提示类型,一类是网关连不上服务主程序,一类是服务主程序连不上网关,两种情况处理方向不一样。优先打开两个窗口的日志内容,网关日志持续发起连接,服务端主程序没有响应,代表监听地址、端口不匹配,或者主程序本身没有正常初始化完成。如果主程序日志显示等待网关接入,网关连接之后立刻断开重试,大多是校验密钥、协议版本、加密包不匹配导致。
核对IP地址配置是第一步,单机环境所有网关和服务主程序的通信IP统一填写127.0.0.1,不要自动获取本机内网IP,部分电脑网卡多,内网IP会变动,填入动态内网IP之后,重启电脑IP变化,网关直接连不上。打开游戏网关的ini配置文件,找到服务端连接地址和端口,再打开服务主程序的配置文件,查看对外监听端口,两处端口数字必须保持一致,端口数字写错一位,就会持续重试连接。
端口占用问题出现频率很高,传奇世界整套程序需要多组独立端口,登录网关、角色网关、游戏网关、主服务程序端口互相独立,端口被其他软件占用时,程序表面可以打开窗口,实际没有正常监听,网关发起连接收不到回复,循环重试。查看日志内的端口绑定失败提示,出现该提示就更换闲置端口,修改所有对应配置文件里的端口,保存文件之后,全部关闭服务进程再重新启动。
密钥与加密校验是这个版本最容易踩坑的地方,传奇世界的服务主程序和各个网关之间内置通信密钥,部分版本还有单独的加密校验码,网关配置文件内的密钥,必须和主程序配置里面的密钥完全一致,空格、大小写、符号都不能有差异。密钥不匹配的时候,网关可以发起TCP连接,但是握手校验直接失败,连接马上断开,自动进入重试循环。有些配套包里面网关和主程序的密钥出厂就不一致,直接使用一键批处理也会出现持续重试。
检查数据库初始化状态,传奇世界单机多数版本使用配套数据库,不同于DBC工具,数据库程序需要最先启动,数据库启动失败或者没有正常加载库表,服务主程序会卡在初始化阶段,不会开启监听端口,网关持续连接自然没有回应。打开数据库程序窗口,查看日志是否提示数据库打开成功,表结构加载完成,出现数据库连接报错、表缺失,就要核对数据库文件路径,路径不能包含中文,同时确认配套数据库程序版本和服务端内核匹配。
文件完整性和配套内核版本问题,网关程序和服务主程序必须是同一套配套文件,混用其他版本的网关替换文件,协议包格式不同,就算IP端口密钥全部正确,握手也会失败,不停重试。不要单独从别的资源包提取网关程序覆盖进来,整套网关、主程序、数据库、脚本文件要保持同源配套。部分老旧内核只支持对应版本网关,新版网关协议改动,无法和老主服务程序通信。
系统防护与防火墙拦截会阻断本机进程之间的通信数据包,防火墙会拦截127.0.0.1本地端口通信,防护程序会隔离网关和主程序之间的数据包。测试阶段退出所有防护软件,关闭系统防火墙,再启动整套程序观察重试状态是否消失。确认是拦截问题之后,把主服务程序、所有网关、数据库程序添加到放行列表,放行进程之间的本地通信。
启动顺序错误也会引发持续重试,正确顺序为先启动数据库程序,等待数据库加载完毕,再启动主服务程序,等待主程序日志提示监听端口开启成功,最后再依次启动登录网关、角色网关、游戏网关。很多人直接双击一键启动批处理,批处理内延时不足,网关启动早于主服务程序,网关连接不上就进入重试循环,就算后面主程序启动完成,部分网关不会自动重连成功,依旧持续报错。遇到这种情况,可以手动按顺序启动,等上一个程序初始化完成,再开启下一个网关。
脚本和资源缺失也会带来隐性影响,主服务程序在加载地图、角色表、核心脚本的时候出现严重报错,初始化流程中断,不会开启服务监听端口,网关一直重试连接。仔细翻看主服务日志,查找地图加载失败、脚本读取错误、资源包校验失败提示,有这类报错就要补齐缺失的资源文件,修复损坏脚本,资源加载全部完成之后,服务端才会正常等待网关接入。
还有一类微端和验证模块的附加校验,部分传奇世界版本附带附加验证组件,验证程序没有正常运行,主服务程序会限制网关接入,网关反复连接被拒绝。查看版本说明,如果带有附加验证程序,需要优先启动这个组件,再启动主服务和网关。
修改完IP、端口、密钥之后,必须全部关闭所有黑色控制台窗口,结束残留进程,再重新按顺序启动,程序读取配置文件只在启动阶段加载,修改配置不重启,参数不会更新,会一直保持重试状态。排查的时候优先看日志提示,根据日志判断是无响应还是校验拒绝,逐项处理,不要一次性改动多个配置,方便定位故障点。