为了账号安全,请及时绑定邮箱和手机立即绑定

Tornado websocket-基于事件发送数据

Tornado websocket-基于事件发送数据

子衿沉夜 2021-06-06 11:10:51
我有一个 python 程序,它在某些事件(例如 curl 请求)会计算函数值。我需要的是函数执行的那一刻,一些数据需要发布到tornado websocket。我环顾了互联网并找到了有关如何创建 websocket 的示例,但所有这些示例都涵盖了在 websocket 处理程序中调用数据的场景例如参考此代码:https : //github.com/benjaminmbrown/real-time-data-viz-d3-crossfilter-websocket-tutorial/blob/master/rt-data-viz/websocket_server.py有人可以指导我如何在 websocket 上发布消息。基本上我有龙卷风 API,如果用户执行 curl 请求,我想将该消息记录到 websocket
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

您可以通过创建所有活动 websocket 的注册表并使用它来发送特定事件的消息来实现。


class WebsocketRegistry:

    def __init__(self):

        self._active_websockets = []


    def add_listener(self, listener):

        self._active_websockets.append(listener)


    def remove_listener(self, listener):

        self._active_websockets.remove(listener)


    def send_messages(self, msg_txt):

        for ws in self._active_websockets:

            ws.write_message(msg_txt)


registry = WebsocketRegistry()


class WSHandler(tornado.websocket.WebSocketHandler):

    def open(self, *args, **kwargs):

        super(WSHandler, self).open(*args, **kwargs)

        registry.add_listener(self)


    def on_close(self):

        super(WSHandler, self).on_close()

        registry.remove_listener(self)

PS 请注意,如果您计划使用 2 个以上的实例扩展您的应用程序,这将不起作用,您必须使用例如消息队列(RabbitMQ 很好)将事件传递到所有打开的 websocket。但总体方法是相同的:MQ 将是一个注册表,而 websockets 在连接时订阅消息(并在关闭时取消订阅)。


查看完整回答
反对 回复 2021-06-08
  • 1 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信