我正在玩一个小项目,以更好地了解 Web 技术。一项要求是,如果多个客户可以访问我的网站,并且其中一个进行了更改,则应通知所有其他客户。从我收集的服务器发送事件来看,似乎可以做我想做的事。但是,当我在 Firefox 和 Chrome 中打开我的网站并尝试发送事件时,只有一个浏览器会收到它。如果我再次发送一个事件,只有一个浏览器会收到新事件,通常是没有收到第一个事件的浏览器。
这是相关的代码片段。
客户:
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);
}
服务器:
@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)
我的问题是,如何将事件发送到所有连接的客户端,而不仅仅是一个?