geventsocketio如何从

2024-09-27 00:17:31 发布

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

这是我的密码:

class FirstNamespace(BaseNamespace):
    def on_some_event(self, msg):
        self.emit('ok '+msg)

@app.route('/socket.io/<path:remaining>')  # socket.io endpoint
def socketio_withpath(remaining):
    socketio_manage(request.environ,
                    {'/channel1': FirstNamespace}
    return 'ok'

@app.route('/dosomething/', methods=['POST'])  # simple http endpoint
def dosomething():
    data = request.form
    # ...
    # some code that triggers self.emit from within FirstNamespace 
    # ...
    return 'data processed'

我可以很高兴地从前端发送socket消息,它们得到处理,我从on_some_event方法接收回复。你知道吗

问题是,我只能收到一个消息,如果我第一次发送自己。你知道吗

但如果我不是第一个说话的人,我怎么开始接收信息呢?你知道吗

例如,如果有人向/dosomething/端点发送了一个POST,它如何触发对我的客户机websocket的emit?你知道吗

---

我可以在flask-socketio中完成,但它对我的口味来说太神奇了。是否有较低级别的实现?你知道吗


Tags: ioselfeventappondefokmsg
1条回答
网友
1楼 · 发布于 2024-09-27 00:17:31

您必须收集集合中的所有channel1连接,然后才能向所有连接发送消息:

from weakref import WeakSet

class FirstNamespace(BaseNamespace):
    connections = WeakSet()

    def initialize(self):
        self.connections.add(self)

    def on_some_event(self, msg):
        self.emit('ok '+msg)

@app.route('/socket.io/<path:remaining>')  # socket.io endpoint
def socketio_withpath(remaining):
    socketio_manage(request.environ,
                    {'/channel1': FirstNamespace}
    return 'ok'

@app.route('/dosomething/', methods=['POST'])  # simple http endpoint
def dosomething():
    data = request.form
    for conn in FirstNamespace.connections:
        conn.emit("response_channel", data)
    return 'data processed'

相关问题 更多 >

    热门问题