首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从服务器发出消息

如何从服务器发出消息
EN

Stack Overflow用户
提问于 2015-07-05 12:44:54
回答 1查看 103关注 0票数 0

这是我的密码:

代码语言:javascript
复制
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中做到这一点,但它对我的口味来说太神奇了。这方面是否有较低级别的实现?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 14:47:43

您必须收集集合中的所有通道1-连接,然后可以向所有连接发送消息:

代码语言:javascript
复制
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'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31230454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档