首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器从Flask向多个客户端发送事件

服务器从Flask向多个客户端发送事件
EN

Stack Overflow用户
提问于 2013-01-06 01:08:28
回答 1查看 4.2K关注 0票数 5

我正在做一个小项目,以更好地理解web技术。一个要求是,如果多个客户访问我的网站,其中一个进行了更改,所有其他人都应该得到通知。从我收集的信息来看,Server Sent events似乎做了我想要做的事情。然而,当我在Firefox和Chrome中打开我的网站并尝试发送事件时,只有一个浏览器收到了。如果我再次发送一个事件,只有一个浏览器会得到新的事件,通常是没有得到第一个事件的浏览器。

下面是相关的代码片段。

客户端:

代码语言:javascript
复制
console.log("setting sse handlers")
viewEventSource = new EventSource("{{ url_for('viewEventRequest') }}");
viewEventSource.onmessage = handleViewEvent;

function handleViewEvent(event){
    console.log("called handle view event")
    console.log(event);
}

服务器:

代码语言:javascript
复制
@app.route('/3-3-3/view-event')
def view_event_request():
    return Response(handle_view_event(), mimetype='text/event-stream')

def handle_view_event():
while True:
    for message in pubsub_view.listen():
        if message['type'] == 'message':
            data = 'retry: 1\n'
            data += 'data: ' + message['data'] + '\n\n'
            return data

@app.route('/3-3-3/test')
def test():
    red.publish('view-event', "This is a test message")
    return make_response("success", 200)

我的问题是,如何将事件发送到所有连接的客户端,而不只是一个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-07 00:15:43

这里有一些可能会有帮助的指南(我一直打算发布一些类似于'flask-sse‘的东西,基于’django-sse‘):

https://gist.github.com/3680055

https://gist.github.com/3687523

也很有用- https://github.com/jkbr/chat/blob/master/app.py

关于你的代码,我注意到的第一件事是'handle_view_event‘不是生成器。尽管它在一个“while”循环中,但是“return”的使用总是会在我们第一次返回数据时退出函数;一个函数只能返回一次。我认为你希望它是“让步”。

在任何情况下,上面的链接都应该为您提供一个工作设置的示例。

正如阿纳罗夫所说,websockets和socket.io也是一种选择,但SSE无论如何都应该可以工作。我认为如果不需要ws,socket.io支持使用SSE。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14174191

复制
相关文章

相似问题

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