即使Flask服务器推送似乎起作用,EventSource.onmessage也不会触发

我创建了一条路由/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>


炎炎设计
浏览 391回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript