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

Binance websocket在AWS EC2 Ubuntu实例运行无响应问题求助

问题排查原因及解决方案
  • AWS网络访问控制限制
    首先确认EC2实例所属安全组的出站规则是否允许TCP 443端口的访问请求,Binance websocket服务运行在443端口,默认安全组可能限制了出站端口范围。其次检查VPC关联的网络ACL(NACL)是否拦截了出站443端口请求,或者入站的响应流量(临时端口范围1024-65535)。
    排查命令:可以在EC2实例内执行 nc -zv fstream.binance.com 443 确认端口是否能连通,返回succeeded!说明端口可达,否则需要调整安全组/NACL规则。

  • Binance区域IP访问限制
    你当前EC2实例所在区域的IP可能被Binance限制访问,TCP握手阶段可以正常完成(所以会打印connected!),但后续Binance服务端不会返回任何业务数据,也不会主动断开连接,就会出现静默卡住的情况。
    排查命令:在EC2内执行 curl https://fapi.binance.com/fapi/v1/ping,如果返回空JSON{}说明IP可正常访问Binance服务;如果返回403/451错误或者长时间无响应,说明IP被限制,需要更换EC2实例的区域,或者配置合规的代理访问。

  • MTU不匹配导致数据包丢失
    AWS EC2实例默认MTU为9001(巨型帧),如果传输路径上的网络设备不支持巨型帧,会导致后续的业务数据包被静默丢弃,出现连接建立成功但收不到数据的情况。
    修复方法:执行命令 sudo ifconfig eth0 mtu 1500 临时将MTU调整为标准值1500,再运行代码测试是否能正常收到数据。

  • 代码缺少异常捕获和心跳配置
    你的现有代码没有配置websocket心跳参数,也没有异常捕获逻辑,可能出现底层网络异常但没有抛出可见报错的情况。另外代码末尾的await client.close_connection()属于无效代码,你未定义client变量,不过因为while是死循环永远不会执行到该行,所以不影响当前运行。
    可以使用修改后的代码测试:

    import websockets
    import asyncio
    
    async def hello():
        # 增加心跳配置,每20秒发一次ping,60秒无响应则超时断开
        async with websockets.connect(
            'wss://fstream.binance.com/ws/!markPrice@arr',
            ping_interval=20,
            ping_timeout=60
        ) as websocket:
            print("connected!")
            while True:
                print("Debug")
                try:
                    # 给recv增加超时时间,避免永久卡住
                    greeting = await asyncio.wait_for(websocket.recv(), timeout=30)
                    print(greeting)
                except Exception as e:
                    print(f"接收数据出错: {e}")
                    break
    
    asyncio.run(hello())
    

    运行修改后的代码如果抛出超时错误,就可以确认是网络层面或者IP限制的问题,而非代码问题。

内容的提问来源于stack exchange,提问作者KrisH Jodu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:00