私は、Webテクノロジーをよりよく理解するために、小さなプロジェクトで遊んでいます。1つの要件は、複数のクライアントが私のサイトにアクセスでき、1つが変更を加えた場合、他のすべてのクライアントに通知する必要があることです。私が収集したものから、サーバー送信イベントは私が望むことをしているようです。ただし、FirefoxとChromeの両方でサイトを開いてイベントを送信しようとすると、一方のブラウザーのみがイベントを取得します。イベントを再度送信すると、ブラウザの1つだけが新しいイベントを取得します。通常、イベント番号1を取得しなかったブラウザです。
関連するコードスニペットは次のとおりです。
クライアント:
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)
私の質問は、イベントを1つだけでなく、接続されているすべてのクライアントに送信するにはどうすればよいですか?