Tornado websocket基于偶数发送数据

2024-04-26 11:14:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python程序,它在某些事件(例如curl请求)上计算函数值。我需要的是函数执行的那一刻,一些数据需要发布到tornadowebsocket。我环顾了internet,找到了一些关于如何创建websocket的示例,但所有这些示例都涵盖了在websocket处理程序中调用数据的场景

例如,参考此代码: https://github.com/benjaminmbrown/real-time-data-viz-d3-crossfilter-websocket-tutorial/blob/master/rt-data-viz/websocket_server.py

有人能指导我如何在websocket上留言吗。基本上我有TornadoAPI,如果用户做了一个curl请求,我想把这个消息记录到websocket中


Tags: 数据函数代码https程序处理程序示例data
1条回答
网友
1楼 · 发布于 2024-04-26 11:14:02

您可以通过创建一个所有活动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)

注意,如果你计划用2+个实例来扩展你的应用程序,这是行不通的,你必须使用一个消息队列(RabbitMQ很好)来向所有打开的websockets传递事件。但总体方法是相同的:MQ将是一个注册表,websockets在连接上订阅消息(关闭时取消订阅)。你知道吗

相关问题 更多 >