WebSocketHandlerを持つTornadoサーバーがあり、localhostのハンドラーに接続するとすべて正常に動作します。ただし、サーバーは新しい環境に移動され、ws
プロトコルの代わりにwss
で実行する必要があります。新しい環境に移行して以来、私のWebSocketHandlerへのすべてのクライアント接続は、開かずにタイムアウトします。しかし、telnet
はうまく接続します。この問題はすべての主要なブラウザafaikで発生します。WebSocketクライアント接続がTornadoサーバーとの接続を開こうとするとタイムアウトする
ファイアウォールでは、私のサーバーが稼働しているポートの例外があり、Tornadoサーバーで.cer
と.key
のファイルを送信することでTLSを有効にしましたが、役に立たなくなりました。また、同じ環境で動作しているApacheサーバーのProxyPassに関するアドバイスhereを試してみましたが、接続はまだタイムアウトしています。
環境:
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()
ProxyPassの設定
ProxyPass /resource/<resource_name> wss://127.0.0.1:8930/resource/<resource_name>
ProxyPassReverse /resource/<resource_name> wss://127.0.0.1:8930/resource/<resource_name>
のWebSocket接続
var ws = new Websocket("wss://my-domain:8930/resource/<resource_id>");
どれ:CentOSのLinuxは1511年7月2日
関連トルネードコードを公開助けていただければ幸いです!