簡體   English   中英

連接在打開時立即關閉

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM