尝试打开与Tornad的连接时,WebSockets客户端连接超时

2024-04-19 14:25:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个带有WebSocketHandler的Tornado服务器,当我连接到本地主机上的处理程序时,一切都能正常工作。但是,服务器正被移动到一个新的环境中,现在必须在wss上运行,而不是ws协议。自从迁移到新环境后,到我的WebSocketHandler的所有客户机连接都会超时而没有打开。telnet连接很好。这个问题出现在所有主流浏览器中,afaik。在

防火墙对我的服务器运行的端口有一个例外,我通过发送我的.cer.key文件在Tornado服务器上启用了TLS,但是没有用。我还尝试遵循关于在同一环境下运行的Apache服务器中使用ProxyPass的建议here,但是连接仍然超时。在

环境:CentOS Linux 7.2.1511版

相关龙卷风代码:

import tornado.websocket
import tornado.ioloop
import tornado.auth
import tornado.escape
import tornado.concurrent

class WSHandler(tornado.websocket.WebSocketHandler)
    def check_origin(self, origin):
        return True

    def open(self, arg1, arg2):
        self.stream.set_nodelay(True)
        self.arg2 = arg2
        self.write_message("Opened the connection")

class WSApp(tornado.web.Application):
    def __init__(self, arg1=None, arg2=None, handlers=None,
                 default_host='', transforms=None, **settings):
        print("Starting WSApp application")
    super(WSApp, self).__init__(handlers=handlers,
                                       default_host=default_host,
                                       transforms=transforms,
                                       **settings)

if __name__ == "__main__":
    settings = {
        "cookie_secret": b'om nom nom' # /s,
        "ssl_options": {
            "certfile": "path/to/certfile.cer",
            "keyfile": "path/to/keyfile.key"
    }

    application = AMQPWSTunnel(handlers=[
                                (r"/(resource)/(.+)", AMQPWSHandler)
                            ],
                            debug=True,
                            **settings)

    application.listen(8930)

    try:
        tornado.ioloop.IOLoop.current().start()
    except keyboardInterrupt:
        application.shutdown()

代理过程设置

^{pr2}$

WebSocket连接

var ws = new Websocket("wss://my-domain:8930/resource/<resource_id>");

任何帮助都将不胜感激!在


Tags: importself服务器nonetruedefaultsettings环境
1条回答
网友
1楼 · 发布于 2024-04-19 14:25:26

问题出在ProxyPass设置和我的wssurl中使用的post。在

龙卷风更新:

ssl证书和密钥文件已从Tornado配置中删除。在

ProxyPass更新:

ProxyPass /resource/<resource_name> ws://127.0.0.1:8930/resource/<resource_name>
ProxyPassReverse /resource/<resource_name> ws://127.0.0.1:8930/resource/<resource_name>

第二个参数必须是一个非ssl协议(从wss://更改为ws://),不过,通过保留证书,我可能已经使用了wss。不过,这不是问题,因为Apache捕获到服务器的传入WebSocket请求。在

客户端更新:

客户机必须向Apache发送请求,然后Apache将请求通过隧道传输到Tornado服务器。所以只需从url中删除端口(或添加Apache的端口号)

^{pr2}$

这三个变化做到了!希望这对其他陷入同一问题的人有所帮助。在

相关问题 更多 >