#python #python-3.x #websocket #tornado
#python #python-3.x #websocket #торнадо
Вопрос:
Я работаю над созданием веб-приложения с использованием tornado версии 6.0.2. Я использую обработчик WebSocket для настройки соединения с клиентом.
Пример реализации на стороне сервера:
from tornado import websocket
import connectionhandler
class WebSocketHandler(websocket.WebSocketHandler):
def initialize(self, connectionhandler):
self.connectionhandler = connectionhandler
async def open(self):
print("WebSocket opened.")
await self.connectionhandler.connection_established_websocket()
async def on_close(self):
print("WebSocket closed.")
await self.connectionhandler.connection_closed_websocket()
Пример реализации на стороне клиента:
ws = websocket.create_connection("ws://localhost:80/ws?")
ws.close()
Когда клиент устанавливает соединение, он вызывает метод open, и все работает правильно.
Но когда клиент закрывает соединение, я получаю сообщение об ошибке on_close, которое никогда не ожидалось.
Когда я удаляю собственную сопрограмму, метод on_close работает.
Вопрос :
Как я могу добавить собственные сопрограммы для метода on_close или вызвать асинхронный метод из on_close()?
Ответ №1:
on_close
не предназначен для асинхронной функции. Чтобы запустить асинхронную функцию из on_close
, используйте IOLoop.add_callback
.
from tornado.ioloop import IOLoop
def on_close(self):
IOLoop.current().add_callback(
self.connectionhandler.connection_closed_websocket
)