Писериальное чтение последовательного порта в колбе (возможно, с использованием Gevent)

Я создаю веб-сервер, который должен будет читать (и продолжать читать) последовательный порт компьютера, на котором он работает.
Цель состоит в том, чтобы иметь возможность читать сканер штрих-кода и использовать отправленные сервером события, чтобы обновить браузер со считанным штрих-кодом.

Я использую колбу, чтобы сделать это. Я просмотрел и некоторые реализации требуют только колбу, некоторые говорят, что мне понадобится асинхронная библиотека, такая как Gevent, а некоторые даже говорят, что мне нужен Gevent и какая-то очередь, такая как Redis или RabbitMQ.

Я попытался основать свой код на очень простом примере, который я нашел на stackoverflowВот, У меня это в основном работает, но я застрял с некоторыми вопросами;

В Chrome есть ошибка перекрестного источника, добавив заголовок Access-Control-Allow-Origin, и я смогу заставить его работать в FireFox, но Chrome все еще не работает. Правильно ли, что только FF поддерживает SSE перекрестного происхождения? Мне нужно это для поддержки CORS, потому что браузер должен будет загрузить данные штрих-кода с отдельной машины.После каждого сообщения браузер отображает штрих-код в консоли, но затем закрывает соединение и открывает его снова примерно через 3 секунды. Кажется, это происходит из Flask, он дает мне данные, а затем просто останавливается.Также мне интересно, как это будет работать под нагрузкой. Я имею в виду, что flask поддерживает соединение открытым для mimetype text / event-stream. Если несколько клиентов подключатся, не заблокирует ли он колбу через некоторое время, потому что все соединения будут насыщены?

Мой код следующий (сокращен для ясности)

Серверный:

from flask import Flask
import flask
import serial

app = Flask(__name__)
app.debug = True

def event_barcode():
    ser = serial.Serial()
    ser.port = 0
    ser.baudrate = 9600
    ser.bytesize = 8
    ser.parity = serial.PARITY_NONE
    ser.stopbits = serial.STOPBITS_ONE
    ser.open()
    s = ser.read(7)
    yield 'data: %s\n\n' % s

@app.route('/barcode')
def barcode():
    newresponse = flask.Response(event_barcode(), mimetype="text/event-stream")
    newresponse.headers.add('Access-Control-Allow-Origin', '*')
    return newresponse

if __name__ == '__main__':
    app.run(port=8080, threaded=True)

Сторона клиента:

    <!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
    <title>TEST</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript" charset="utf-8"></script>
    <script>

        $(document).ready(function(){
            if (!!window.EventSource) {
                console.log('SSE supported.');
                var source = new EventSource('http://localhost:8080/barcode');

                source.addEventListener('message', function(e) {
                  console.log(e.data);
                }, false);

                source.addEventListener('open', function(e) {
                  console.log('Connection was opened.');
                }, false);

                source.addEventListener('error', function(e) {
                  if (e.readyState == EventSource.CLOSED) {
                    console.log('Connection was closed.');
                  }
                }, false);

            } else {
                console.log('SSE notsupported.');
            }
        });

    </script>
</head>

<body>

</body>
</html>

Вот еще некоторая информация, на которую я смотрел:http://www.socketubs.net/2012/10/28/Websocket_with_flask_and_gevent/ http://sdiehl.github.com/gevent-tutorial/#chat-server

Я надеюсь, что кто-то может прояснить мои вопросы и, возможно, указать мне на некоторые решения для перекрестного источника и проблемы 3-секундной задержки.

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос