WebSocket Handler on_close 方法 async 实现tornado
Posted
技术标签:
【中文标题】WebSocket Handler on_close 方法 async 实现tornado【英文标题】:WebSocket Handler on_close method async Implementation tornado 【发布时间】:2019-04-19 06:23:01 【问题描述】:我正在使用 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 is never awaited.
当我删除本机协程时 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
)
【讨论】:
以上是关于WebSocket Handler on_close 方法 async 实现tornado的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Go 中将 websocket 与 NewServeMux 一起使用?
netty : websocketx.WebSocketHandshakeException: not a WebSocket handshake request: missing upgrade(代