【问题标题】:Can GAE restrict my websocket connections?GAE 可以限制我的 websocket 连接吗?
【发布时间】:2020-02-03 19:30:01
【问题描述】:

我使用 websocket_client python 应用程序和以下代码 -

ws = websocket.WebSocket(sslopt={"cert_reqs": ssl.CERT_NONE})
ws.connect("wss://something.synology.me:1111")
ws.send(json.dumps({
    'token': device_token,
    'payload': {'volume': 0.5}

}))
ws.close()

有时效果很好,有时我会收到以下错误 -

WebSocketAddressException: [Errno -2] Name or service not known

昨天它或多或少地工作正常(假设两次尝试一次),但今天根本不工作。我尝试使用本地 Google App Engine 运行相同的代码 - 它运行良好。

GAE 服务器是否可能以某种方式限制我的连接?我应该检查什么?

更新。进一步分析表明,这个问题可能是由这个part of code引起的:

def _get_addrinfo_list(hostname, port, is_secure, proxy):
    phost, pport, pauth = get_proxy_info(
        hostname, is_secure, proxy.host, proxy.port, proxy.auth, proxy.no_proxy)
    try:
        if not phost:
            addrinfo_list = socket.getaddrinfo(
                hostname, port, 0, socket.SOCK_STREAM, socket.SOL_TCP)
            return addrinfo_list, False, None
        else:
            pport = pport and pport or 80
            addrinfo_list = socket.getaddrinfo(phost, pport, 0, socket.SOCK_STREAM, socket.SOL_TCP)
            return addrinfo_list, True, pauth
    except socket.gaierror as e:
        raise WebSocketAddressException(e)

即在 GAE 上运行 socket.getaddrinfo 可能是问题所在。

【问题讨论】:

  • 这是标准环境和python2.7吗?检查limitations
  • @EmilGi,是的,这是标准环境和 python 2.7。我已经了解了这些限制,但我不确定“付费应用”——但正如我所说——有时它可以工作,这很奇怪。
  • 在本地工作但不在部署中工作只能意味着这是一些 Python2 标准环境限制。我只能建议迁移到 Python3,因为不再支持 Python2。
  • @EmilGi,感谢您的帮助。问题出在计费上 - 它未启用。奇怪的是,GAE 方面没有正常处理这种情况 - 可能会有一些更好的错误消息。

标签: python google-app-engine websocket firewall


【解决方案1】:

问题在于计费 - 未启用,因此套接字无法正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-12
    • 1970-01-01
    • 2014-04-09
    相关资源
    最近更新 更多