Используя SSE и javascript EventSource, я пытаюсь создать функцию генератора, которая будет передавать уведомление клиенту с помощью Flask Response (). Я заставил это работать большую часть времени, но я теряю некоторые уведомления, которые выдаются, но не принимаются браузером ...
Я много читал о функции генератора, но не могу заставить ее работать должным образом. Я, наверное, упускаю что-то очевидное, но, потратив на это все свое свободное время, я решил обратиться за помощью. ; -)
Вот мой класс очереди уведомлений, использующий deque с моей функцией / методом генератора read ():
class EventStream:
"""
This class is used to read or write items to the notifications deque.
"""
def __init__(self):
self.queue = deque(maxlen=100)
def write(self, type=None, action=None, series=None, episode=None, movie=None):
msg = {"type": type, "action": action, "series": series, "episode": episode, "movie": movie}
self.queue.append("data: " + json.dumps(msg) + "\n\n")
def read(self):
while True:
while self.queue:
yield self.queue.popleft()
event_stream = EventStream()
Вот мой Flask Ответ:
return Response(event_stream.read(), mimetype="text/event-stream", content_type="text/event-stream")
Вот мой javascript:
events = new EventSource('{{ url_for('api.events') }}');
events.onmessage = function (event) {
var event_json = JSON.parse(event.data);
... working with event_json data...
};
Есть идеи, что мне здесь не хватает? Спасибо!