我正在玩一個小型項目,以更好地理解Web技術。 一個要求是,如果多個客戶端有權訪問我的網站,並且有一個進行了更改,則應通知所有其他客戶。從我收集的服務器發送的事件似乎做我想要的。 但是,當我在Firefox和Chrome中打開我的網站並嘗試發送事件時,只有其中一個瀏覽器可以獲取它。如果我再次發送一個事件,則只有其中一個瀏覽器獲得新事件,通常是沒有獲得第一個事件的瀏覽器。服務器從Flask發送事件給多個客戶端
這裏是相關的代碼片段。
客戶:
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)
我的問題是,我如何才能將事件發送到所有連接的客戶端,而不是隻有一個?
我不熟悉服務器發送的事件,所以我不知道這裏的問題,但我建議研究其他解決方案,如WebSockets和socket.io,看看他們是否更適合你的情況。 – Anorov