如何连接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
相关产品推荐
相关产品推荐

