You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebSocketSharp对接GameLift Fleet时连接异常求助

AWS GameLift Fleet WebSocket 连接故障排查指南(WebSocketSharp)

一、GameLift 核心配置必查项

1. Fleet 端口映射与服务器注册端口

  • 创建Fleet时必须配置服务器进程端口,该端口必须和你的WebSocket服务监听端口完全一致(比如你用的2022)。
  • 同时在Fleet的端口映射规则中,将客户端访问端口(建议和服务器端口一致,避免混淆)映射到服务器进程端口。
  • 服务器启动后,必须调用GameLift的ProcessReady接口注册进程,注册时指定的端口必须和WebSocket监听端口匹配:
    var processParams = new ProcessParameters(
        port: 2022,
        logPath: "./game-lift-logs",
        onTerminate: () => { /* 资源清理逻辑 */ },
        onHealthCheck: () => true
    );
    GameLiftServerAPI.ProcessReady(processParams);
    

2. 安全组配置

  • 确保Fleet关联的EC2安全组入站规则开放TCP 2022端口,允许客户端IP段(测试阶段可暂时设为0.0.0.0/0)访问。
  • 安全组出站规则需允许实例访问GameLift服务(TCP 443),否则服务器进程无法完成注册。

3. VPC 网络配置

  • 如果Fleet部署在私有子网,需配置NAT网关确保实例能与GameLift服务通信;同时若客户端从公网访问,需确保实例有公网IP或绑定弹性IP。
  • 检查VPC路由表,确认公网流量能正确路由到实例所在子网。

二、WebSocketSharp 代码层面排查

1. 服务端监听地址

  • 必须让WebSocketServer监听0.0.0.0而非localhost或127.0.0.1,否则仅能本地访问,外部客户端无法连接:
    // 正确初始化方式
    _instance.mServer = new WebSocketServer(2022); 
    // 显式指定监听地址的写法
    _instance.mServer = new WebSocketServer("ws://0.0.0.0:2022");
    

2. 客户端连接地址

  • 客户端必须使用GameLift返回的游戏会话IP和端口拼接WebSocket地址,禁止硬编码实例IP。通过CreateGameSession或DescribeGameSession接口获取IpAddress和Port字段:
    // 示例:从GameLift获取会话信息后拼接URI
    string uri = $"ws://{gameSession.IpAddress}:{gameSession.Port}/your-service-name";
    

3. 心跳与超时配置

  • 客户端和服务端都需配置Ping心跳,避免因无数据传输被网络设备断开连接:
    // 客户端配置
    webSocket.PingInterval = TimeSpan.FromSeconds(30);
    webSocket.EmitOnPing = true;
    
    // 服务端配置
    _instance.mServer.PingInterval = TimeSpan.FromSeconds(30);
    

4. 错误日志采集

  • 在服务端会话类中重写错误和关闭事件,打印详细信息:
    public class GameSessionWebSocket : WebSocketServerSession
    {
        protected override void OnError(ErrorEventArgs e)
        {
            Console.WriteLine($"WebSocket Error: {e.Message} | Exception: {e.Exception?.StackTrace}");
            base.OnError(e);
        }
    
        protected override void OnClose(CloseEventArgs e)
        {
            Console.WriteLine($"WebSocket Closed: Code={e.Code} | Reason={e.Reason}");
            base.OnClose(e);
        }
    }
    
  • 客户端同样在OnError事件中打印错误,定位是连接阶段还是连接后的异常断开。

三、AWS 网络连通性测试

1. 端口连通性验证

  • 客户端使用telnet或nc命令测试游戏会话IP的2022端口:
    telnet <game-session-ip> 2022
    
  • 若无法连通,优先排查安全组、VPC路由或Fleet端口映射配置。

2. 实例内部端口监听检查

  • 登录EC2实例,执行命令确认WebSocket服务是否在监听指定端口:
    netstat -tulpn | grep 2022
    
  • 若无结果,说明服务端未正确启动WebSocketServer,或端口被其他进程占用。

3. GameLift 实例状态检查

  • 在GameLift控制台查看Fleet实例状态,确保实例处于ACTIVE,服务器进程处于READY。
  • 查看实例日志(控制台->实例详情->日志),检查是否存在服务启动失败、GameLift注册失败等错误信息。

四、常见问题总结

  • 服务器进程注册端口与WebSocket监听端口不一致,导致GameLift无法路由流量。
  • WebSocketServer仅监听本地地址,外部无法访问。
  • Fleet端口映射配置错误,客户端访问端口未映射到服务器监听端口。
  • 安全组/VPC配置限制了外部流量访问实例端口。

内容的提问来源于stack exchange,提问作者조희재

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:35:30