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

如何连接EC2上运行的WebSocket?连接超时问题求助

排查与解决方案
  • 验证服务器监听状态
    登录EC2实例,执行以下命令确认WebSocket服务的监听地址:

    ss -tulpn | grep 8918
    

    确保输出显示监听地址为0.0.0.0:8918或:::8918(公网可访问),而非仅127.0.0.1:8918(仅本地可访问)。同时确认进程是你的Go程序。

    可在EC2内部用wscat测试服务可用性:

    # 先安装wscat:npm install -g wscat
    wscat -c ws://localhost:8918/echo
    

    发送消息测试回声功能,确认服务本身无逻辑问题。

  • 检查EC2网络基础配置

    • 确认弹性IP(EIP)已正确绑定到目标EC2实例,未绑定至其他实例。
    • 检查实例所在子网的路由表,确保存在指向互联网网关(IGW)的0.0.0.0/0路由(公网访问场景必需)。
  • 排查系统级防火墙
    EC2实例可能自带操作系统防火墙(如iptables、ufw),执行以下命令检查规则:

    # 查看iptables规则
    iptables -L -n
    
    # 若使用ufw,查看状态
    ufw status
    

    确保规则未阻止8918端口的入站流量,如有需要添加开放规则:

    # iptables开放端口
    iptables -A INPUT -p tcp --dport 8918 -j ACCEPT
    
    # ufw开放端口
    ufw allow 8918/tcp
    
  • 调试Python客户端
    给客户端添加超时和日志,明确连接失败阶段:

    import websocket
    import logging
    
    logging.basicConfig(level=logging.DEBUG)
    
    ws = websocket.WebSocket()
    try:
        ws.connect("ws://your-eip:8918/echo", timeout=10)
        print("连接成功")
        ws.send("Hello, WebSocket!")
        print("消息发送完成")
    except Exception as e:
        print(f"错误详情: {e}")
    finally:
        ws.close()
    

    通过日志可查看连接过程中的握手细节,定位是DNS解析、TCP连接还是WebSocket握手阶段出错。

  • 核对NACL规则顺序
    NACL规则按优先级匹配,确保允许8918端口入站的规则排在所有拒绝规则之前。同时注意NACL是无状态的,出站规则需允许服务器返回的流量(通常是1024-65535端口的TCP流量),否则即使入站允许,响应无法返回也会导致超时。


内容的提问来源于stack exchange,提问作者nat-echlin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:10:29