Я создал маршрут /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>