GAE 可以限制我的 websocket 连接吗?

Posted

技术标签:

【中文标题】GAE 可以限制我的 websocket 连接吗?【英文标题】:Can GAE restrict my websocket connections? 【发布时间】: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 方面没有正常处理这种情况 - 可能会有一些更好的错误消息。 【参考方案1】:

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

【讨论】:

以上是关于GAE 可以限制我的 websocket 连接吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 iis 8 上为 websocket 设置限制并发连接

写入云存储时 GAE 内存泄漏,我可以流式传输吗?

2020-06-18 面试:netty最多可以支持多少个websocket 长连接

nginx可以对websocket连接做透明压缩吗?

kaazing websocket 与 gae

GAE 中的“软私有内存限制”是啥?