Im создает программу на Python, которая считывает поток данных на неизвестном интервале. Эта программа также отправляет эти данные через websockets. Программа является сервером и отправляет полученные данные клиентам.Tornado отправить сообщение на событие
Это код сервера в настоящее время:
class WebSocketHandler(tornado.websocket.WebSocketHandler):
def initialize(self):
print 'Websocket opened'
def open(self):
print 'New connection'
self.write_message('Test from server')
def on_close(self):
print 'Connection closed'
def test(self):
self.write_message("scheduled!")
def make_app():
return tornado.web.Application([
(r'/ws', WebSocketHandler),
])
if __name__ == '__main__':
application = make_app()
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Но я хочу, чтобы иметь возможность использовать write_message
в этом цикле:
def read_function():
while True:
time.sleep(10) # a while loop to simulate the reading
print 'read serial'
str = 'string to send'
# send message here to the clients
Как я должен делать это?
EDIT: возникнут проблемы с обоими потоками, использующими соединения? Кажется, он работает с 1 соединением.
def read_function():
while True:
time.sleep(5) # a while loop to simulate the reading
print 'read serial'
str = 'string to send'
[client.write_message(str) for client in connections]
if __name__ == '__main__':
thread = Thread(target = read_function)
application = make_app()
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
thread.start()
tornado.ioloop.IOLoop.instance().start()
thread.join()
Возможно, вы также хотите, чтобы удалить соединение из набора, когда они отключены. –