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

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

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

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

я попытался основать свой код на очень простом примере, который я нашел в 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)

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

    


    
    TEST
    
    

        $(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.');
            }
        });

    






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

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

Благодарю.

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

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