EventSource.onmessage не запускается, даже несмотря на то, что принудительное использование Flask-сервера работает - PullRequest
0 голосов
/ 10 мая 2019

Я создал маршрут /stream, который должен выдавать строку 'test' каждую секунду.

Когда я открываю этот URL (localhost:12346/stream) в Chrome, он действительно открывает пустую страницу и "тест""добавляется на страницу каждую секунду, поэтому я думаю, что серверная часть работает правильно.Когда я открывал его в Firefox, он рассматривал его как загрузку файла, которая никогда не заканчивается.

Но когда я открываю client.html ниже, событие onmessage объекта EventSource никогда не запускается, поэтому я не получаю данных,Событие onopen сработало, и я вижу его в консоли.Почему это?Как я могу получить данные на стороне JavaScript?

server.py:

import flask
import flask_cors
import time

app = flask.Flask(__name__)
app.debug = True
flask_cors.CORS(app)

def event_stream():
    while True:
        time.sleep(1)
        yield 'test\n'

@app.route('/stream')
def stream():
    return flask.Response(event_stream(), mimetype='text/event-stream')

app.run(port=12346, threaded=True)

client.html:

<!DOCTYPE html>
<html>
  <body>
    <script>
        var source = new EventSource('http://localhost:12346/stream');
        source.onopen = e => console.log('opened', event);
        source.onerror = e => console.log('error', event);
        source.onmessage = e => console.log('onmessage', event);
    </script>
  </body>
</html>

1 Ответ

1 голос
/ 20 мая 2019

Событие, отправленное сервером EventStream не вызывает «onmessage», но Chrome Debug показывает данные на вкладке «EventStream»

Это решило мою проблему, сервер отправлял события с пользовательским типом, который не вызываетответное сообщение

...