Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да внедря натискане на сървър в рамката на Flask?

Разгледайте изпратените от сървъра събития. Server-Sent Events е API за браузър, който ви позволява да поддържате отворен сокет към вашия сървър, като се абонирате за поток от актуализации. За повече информация прочетете публикацията на Alex MacCaw (автор на Juggernaut) за това защо той убива juggernaut и защо по-простите събития, изпратени от сървъра, в много случаи са по-добрият инструмент за работа от Websockets.

Протоколът е наистина лесен. Просто добавете mimetype text/event-stream на вашия отговор. Браузърът ще поддържа връзката отворена и ще слуша за актуализации. Eventsent от сървъра е ред от текст, започващ с data: и следващ нов ред.

data: this is a simple message
<blank line>

Ако искате да обменяте структурирани данни, просто изхвърлете данните си като json и изпратете json по кабел.

Предимство е, че можете да използвате SSE във Flask без нужда от допълнителен сървър. Има прост пример за приложение за чат на github, който използва Redis като бекенд на pub/sub.

def event_stream():
    pubsub = red.pubsub()
    pubsub.subscribe('chat')
    for message in pubsub.listen():
        print message
        yield 'data: %s\n\n' % message['data']


@app.route('/post', methods=['POST'])
def post():
    message = flask.request.form['message']
    user = flask.session.get('user', 'anonymous')
    now = datetime.datetime.now().replace(microsecond=0).time()
    red.publish('chat', u'[%s] %s: %s' % (now.isoformat(), user, message))


@app.route('/stream')
def stream():
    return flask.Response(event_stream(),
                          mimetype="text/event-stream")

Не е необходимо да използвате gunicron, за да стартирате примерното приложение. Просто се уверете, че използвате нишки, когато стартирате приложението, защото в противен случай връзката SSE ще блокира вашия сървър за разработка:

if __name__ == '__main__':
    app.debug = True
    app.run(threaded=True)

От страна на клиента ви трябва просто функция за обработка на Javascript, която ще бъде извикана, когато ново съобщение бъде избутано от сървъра.

var source = new EventSource('/stream');
source.onmessage = function (event) {
     alert(event.data);
};

Събитията, изпратени от сървъра, се поддържат от последните браузъри Firefox, Chrome и Safari. Internet Explorer все още не поддържа събития, изпратени от сървъра, но се очаква да ги поддържа във Версия 10. Има два препоръчани Polyfill за поддръжка на по-стари браузъри

  • EventSource.js
  • jquery.eventsource


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Актуализирайте обекта в redis с spring-data-redis

  2. Как NoSQL бази данни се представят върху агрегатни функции (AVG, SUM и т.н.)

  3. Как да конфигурирам клиента на Node Redis да хвърля незабавно грешки, когато връзката е неуспешна? [ЧЕТЕТЕ ПОДРОБНОСТИ]

  4. Защо 500MB Redis dump.rdb файл отнема около 5,0GB памет?

  5. redis dump.rdb / запазване на малки файлове