我有一個帶有WebSocketHandler的Tornado服務器,並且當我連接到本地主機上的處理程序時,一切正常。但是,服務器正在遷移到新的環境,現在必須運行wss
而不是ws
協議。自遷移到新環境以來,所有到我的WebSocketHandler的客戶端連接都會超時而不會打開。然而,telnet
連接就好了。這個問題發生在所有主流瀏覽器afaik。當試圖打開與龍捲風服務器的連接時WebSockets客戶端連接超時
防火牆有一個例外,我的服務器正在運行,我已經在Tornado服務器上啓用了TLS,通過發送我的.cer
和.key
文件,但無濟於事。我也試着在關於在同一環境中運行的Apache服務器中使用ProxyPass的建議here,並且連接仍然超時。
環境:CentOS的Linux的發佈1511年7月2日
相關龍捲風代碼:
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>");
任何幫助將不勝感激!