#python #websocket #tornado
Вопрос:
Здравствуйте, я хочу создать несколько сервисов, которые взаимодействуют через веб-сайты на Python. Для этого я использую tornado.websocket.
Одной из этих служб является контроллер, и каждая другая служба должна зарегистрироваться на контроллере. Итак, торнадо.websocket.WebSocketHandler каким-то образом является «пассивным» кодом, потому что он ожидает входящего сообщения и ответа на входящее сообщение. Поэтому для регистрации службы на контроллере я использую websocket_connect (), контроллер сохраняет соединение и ответ на него. Вот в чем проблема, мне нужно, чтобы ответ был отправлен на on_message() tornado.websocket.WebSocketHandler, а не к объекту websocket_connect().
Можно ли перенаправить это сообщение из websocket_connect() в on_message? Я попытался выполнить обратный вызов на websocket_connect, но возникла проблема, что мне нужна информация об отправителе сообщения, а не только само сообщение.
class WSHandler(tornado.websocket.WebSocketHandler):
def open(self):
pass
def on_message(self, message):
pass
def on_close(self):
pass
def check_origin(self, origin):
"""Must return true to disable CORS-policy"""
return True
def data_received(self, chunk: bytes):
pass
def make_app(drf, handler_factory, hn_cfg):
application = tornado.web.Application([
(r'/.*`', WSHandler, {}),
])
return application
def main():
platform_setup()
port = int(load_env("PORT", 8080))
# WS client Setup
ws_cfg = WsClientConfiguration.from_environment("CTR_")
ws_cli_hn = WsClient(drf, ws_cfg)
ws_handler = WSHandler_Test(drf, handler_factory, hn_cfg)
loop = asyncio.get_event_loop()
loop.run_until_complete(ws_cli_hn.register_ctr(SVC_NAME, ws_handler))
app = make_app(drf, handler_factory, hn_cfg)
user_manager_cfg.printout()
run_web_socket_server(app, port)
if __name__ == "__main__":
main()