我创建了一条路由/stream,该路由应该每秒推送一次字符串“ test”。
当我localhost:12346/stream在Chrome上打开此URL()时,它的确打开了一个空白页面,并且每秒都会在页面上附加一个“测试”,因此我认为服务器端可以正常工作。当我在Firefox上打开它时,它将其视为永远不会完成的文件下载。
但是,当我client.html在下面打开时,onmessageEventSource对象的事件从未触发,因此我没有任何数据。该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>
相关分类