Python Tornado: отправка сообщений веб-сокета из другого класса - PullRequest
0 голосов
/ 30 сентября 2018

Есть приложение, которое использует (Python 3.6) Tkinter & Tornado.Хотел бы он отправить сообщение веб-сокета при нажатии кнопки.

SendSocket в моем классе, который обрабатывает интерфейс.Я могу открыть свои сокеты в порядке, и могу отправить данные в обработчик сокетов в порядке.Кроме того, он подает мой HTML-файл в порядке от моего RequestHandler.

Я вижу, что мой код соответствует строке sendSocketMessage.Тем не менее, я никогда не получаю распечатку из определения SocketHandler.send_message.В консоли нет ошибок.

    def sendSocketMessage(self, data = "whatever"):
        print("sending")
        #WebSocketeer.send_message(data)        
        ioloop.IOLoop.current().add_callback(WebSocketeer.send_message, data)

class WebSocketeer(websocket.WebSocketHandler):    
    def open(self):
       print("WebSocket opened")

    def on_message(self, message):
       print("got message: " + message)

    def on_close(self):
       print("WebSocket closed")

    @classmethod
    def send_message(self, message):
        print("sending message: " + message)
        for session_id, session in self.session.server._sessions._items.iteritems():
            session.conn.emit(event, message)

Код, основанный на этих ответах SO

1 Ответ

0 голосов
/ 30 сентября 2018

Найден способ заставить его работать здесь: Как запускать функции вне цикла веб-сокетов в python (торнадо)

Но я все еще задаюсь вопросом, почему add_callback не работает - как,из того, что я прочитал, это рекомендуемый способ.

...