WebSocket Handler on_close 方法 async 实现龙卷风

Sha*_*n26 5 python tornado websocket python-3.x

我正在使用 Tornado 6.0.2 版构建 Web 应用程序。我正在使用 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()

Run Code Online (Sandbox Code Playgroud)

示例客户端实现:

ws = websocket.create_connection("ws://localhost:80/ws?")
ws.close()
Run Code Online (Sandbox Code Playgroud)

当客户端建立连接时,它调用 open 方法并且一切正常。

但是当客户端关闭连接时,我收到错误 on_close 从未等待过。

当我删除本机协程时 on_close 方法正在工作。

题 :

如何为 on_close 方法添加本机协程或从 on_close() 调用异步方法?

xyr*_*res 2

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
     )
Run Code Online (Sandbox Code Playgroud)