как отправить данные через websocket через пользовательский цикл "while" - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь установить соединение между кодом сервера Python, который генерирует данные, и клиентом javascript, который их отображает.
Все ответы, которые я вижу, это переопределение некоторого класса, и вам нужно немного знаний в сети, чтобы сделать это.
Я рассматриваю эту проблему как простое использование websocket, поэтому я полагаю, что это простое использование, которое я не вижу без использования классов ...

моя проблема может быть уменьшена по этому коду:

# definition of the websocket
application = web.Application([(r'/websocket',WebSocketHandler)])
application.listen(8001)


while True:
       val = generate_data()
       application.send(val) #it's this part that i miss 

Реальная проблема здесь в том, что моя функция generate_data() немного сложна и отображает некоторые вещи, теперь передача ее в функцию class WShandler(..) просто не правильный подход, она сложна и, скорее всего, не работает. Более того, время отправки данных должно обрабатываться циклом while, а не тайм-аутом, который я определю.

1 Ответ

0 голосов
/ 13 марта 2019

Использование библиотеки websocket-server https://github.com/Pithikos/python-websocket-server возможно вам просто нужно переопределить функцию run_forever в websocket server.py из:

    logger.info("Listening on port %d for clients.." % self.port)
    self.serve_forever()

до:

    logger.info("Listening on port %d for clients.." % self.port)
    # self.serve_forever()
    _serve = self.serve_forever
    server_thread = threading.Thread(target=_serve)
    # server_thread.daemon = True
    server_thread.start()

После в вашем коде:

r = WebsocketServer(8001, host='localhost', loglevel=logging.INFO)
server.run_forever()
while True:
    val = generate_data()
    server.send_message_to_all(val)

И это работает как шарм. Может быть, это способ сделать то же самое с торнадо ..

Источник:
https://github.com/Pithikos/python-websocket-server/issues/30
Поточный, неблокирующий клиент веб-сокета

...