【问题标题】:gevent-socketio how to originate messages from servergevent-socketio 如何从服务器发起消息
【发布时间】:2015-09-22 16:35:23
【问题描述】:

这是我的代码:

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'

我可以愉快地从前端发送套接字消息,它们得到处理,我收到来自on_some_event 方法的回复。

问题是,如果我自己先发送一条消息,我只能收到一条消息。

但是我怎样才能在不第一个说话的情况下开始接收消息呢?

例如,如果有人向 /dosomething/ 端点发送 POST,它如何触发 emit 到我的客户端 websocket?

--

我可以在flask-socketio 中做到这一点,但它对我的口味来说太神奇了。是否有更低级别的实现?

【问题讨论】:

  • 不明白这个问题。您可以随时使用self.emit('response_channel', msg)发送消息。
  • @Daniel 是的,但假设您有另一个端点,例如 localhost:8080/dosomething。假设你想在那里发布一个常规的 POST,并且你希望它触发一个emit 到一个 websocket。你是怎么做的?
  • 请编辑您的问题,明确您想要达到的目标。
  • @Daniel 已编辑,谢谢。

标签: python socket.io gevent gevent-socketio


【解决方案1】:

你必须将所有channel1-Connections收集到一个集合中,然后你才能向所有连接发送消息:

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'

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 2012-08-04
    • 2019-07-09
    • 2015-09-20
    • 2013-05-19
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多