[英]Connection closes immediately on open
我正在運行一個非常簡單的echo websocket服務器,如下所示:
#!/usr/bin/python
import datetime
import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web
class WSHandler(tornado.websocket.WebSocketHandler):
clients = []
def open(self):
print('new connection')
self.write_message("Hello World")
WSHandler.clients.append(self)
def on_message(self, message):
print('message received %s' % message)
self.write_message('ECHO: ' + message)
def on_close(self):
print('connection closed')
WSHandler.clients.remove(self)
@classmethod
def write_to_clients(cls):
print("Writing to clients")
for client in cls.clients:
client.write_message("Hi there!")
def check_origin(self, origin):
return True
application = tornado.web.Application([
(r'/websocket', WSHandler),
])
if __name__ == "__main__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(80)
tornado.ioloop.IOLoop.instance().start()
我用javascript連接到這個,如下所示
var ws = new WebSocket("ws://localhost:80/websocket");
在控制台中,我看到了
new connection
connection closed
我不明白的是為什么我在控制台中看到connection closed
。 客戶端還指示連接已關閉,但我沒有看到任何正當理由。 任何幫助將不勝感激。 要復制以管理員身份運行python代碼,打開任何JS控制台並輸入JS代碼。 我希望的結果是套接字不能立即關閉。 這有點基於我在龍卷風文檔中讀到的內容。
通過在open
方法中注釋掉self.write_message("Hello World")
來編輯更新,連接不會關閉。 但是,從文檔運行示例代碼現在會產生一些有趣的東西。
var ws = new WebSocket("ws://localhost:80/websocket");
ws.onopen = function() {
ws.send("Hello, world");
};
ws.onmessage = function (evt) {
alert(evt.data);
};
服務器端輸出是
new connection
message received Hello, world
connection closed
客戶端沒有預期的相應警報
新問題與舊問題相同,這就是為什么服務器說connection closed
? 看起來self.write_message
可能是罪魁禍首。
不確定這是否有用,但是我運行了你的代碼,它的工作原理與你期望的一樣。 我沒有收到你問題中指出的連接關閉消息,直到我調用ws.close()
。 (龍卷風4.4.1)。
無論問題是什么,它似乎都在您的環境中,而不是您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.