回答我自己的问题
- 似乎确实只有Firefox暂时支持SSE的CORS-> article
- 在Janus Troelsen的帮助下,我弄清楚了如何保持连接打开并跨线发送多个条形码(请参见下面的代码)
- 从性能角度看,我只能建立一个连接,但这可能是因为我只有一个串行端口,后续的连接再也无法打开串行端口。我认为它可以在烧瓶中工作,但是使用socketio和gevents的东西会更好地执行,因为它更适合该工作。这里有一个有趣的文章在这里。
对于代码:
import flaskimport serialfrom time import sleepapp = flask.Flask(__name__)app.debug = Truedef event_barpre(): messageid = 0 ser = serial.Serial() ser.port = 0 ser.baudrate = 9600 ser.bytesize = 8 ser.parity = serial.PARITY_NONE ser.stopbits = serial.STOPBITS_ONE ser.timeout = 0 try: ser.open() except serial.SerialException, e: yield 'event:errorn' + 'data:' + 'Serial port error({0}): {1}nn'.format(e.errno, e.strerror) messageid = messageid + 1 str_list = [] while True: sleep(0.01) nextchar = ser.read() if nextchar: str_list.append(nextchar) else: if len(str_list) > 0: yield 'id:' + str(messageid) + 'n' + 'data:' + ''.join(str_list) + 'nn' messageid = messageid + 1 str_list = []@app.route('/barpre')def barpre(): newresponse = flask.Response(event_barpre(), mimetype="text/event-stream") newresponse.headers.add('Access-Control-Allow-Origin', '*') newresponse.headers.add('Cache-Control', 'no-cache') return newresponseif __name__ == '__main__': app.run(port=8080, threaded=True)因为我想支持多种浏览器,所以SSE暂时不适合我。我将研究websockets并尝试从中工作。



