WebSocket处理程序on_close方法异步实现龙卷风

时间:2019-04-19 06:23:02

标签: python python-3.x websocket tornado

我正在使用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()

示例客户端实施:

ws = websocket.create_connection("ws://localhost:80/ws?")
ws.close()

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

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

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

问题:

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

1 个答案:

答案 0 :(得分:0)

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
     )