Может ли фреймворк отправлять данные в реальном времени с сервера в браузер клиента?

Мне было интересно, как (если вообще) flask выполняет длительный опрос, чтобы сервер мог отправлять данные через соединение с клиентом. Например, если сервер получает канал Twitter через API потоковой передачи, как он будет передан клиентскому браузеру?

Я так понимаю, что вы не можете использовать flask.flash в такой ситуации.

Спасибо

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

Я основал его на flask snippet (), используя juggernaut и redis. Это мой код на Python:

import flask
from flask.views import MethodView
from tweetStreamsRT import StreamerRt 
from juggernaut import Juggernaut


app = flask.Flask(__name__)
app.secret_key = "xxxxx"
PORT = 8080

class View(MethodView):

    def get(self):
        return flask.render_template('index.html')

    def post(self):
        results = StreamerRt().filter(track=[flask.request.form['event']])            
        jug = Juggernaut()
        jug.publish('channel', results)
        return self.get()


app.add_url_rule('/', view_func = View.as_view('index'), methods=['GET', 'POST'])
app.debug = True

if __name__ == "__main__":
    print 'Listening on http://localhost:%s' % PORT
    app.run()

Моя html-страница наследуется от базовой html-страницы:

{% extends "base.html" %}
{% import "forms.html" as forms %}


{% block page_header %}
  <div class="page-header">
    <h1>Welcome</h1>
  </div>
{% endblock %}
{% block content %}
  <h2>Enter the Event you would like to follow</h2>
      <form action="/" method="post">
            <input type="text" name="event" />
            <input type="submit" value="Submit Query" />
          </form>
            Results:
            <pre>
                <script type="text/javascript" charset="utf-8">
                    var jug = new Juggernaut;
                    jug.subscribe("channel", function(data){
                    alert("Got data: " + data);});
                </script>

            </pre> 
{% endblock %}

Я все еще не понимаю, почему в клиентский браузер ничего не отправляется.

Спасибо


person user94628    schedule 23.10.2012    source источник
comment
Об этом рассказывается flask snippet.   -  person Burhan Khalid    schedule 23.10.2012
comment
Спасибо Burhan, поэтому, если я буду следовать фрагменту фляги, то вставляю эти фрагменты кода как в клиент, так и на сервер. Я должен иметь возможность публиковать сообщения в реальном времени для клиента. Значит ли это, что мне не нужно использовать gevent и socketio? Спасибо   -  person user94628    schedule 23.10.2012
comment
Это именно то, что это означает. Об этом позаботятся вы.   -  person Burhan Khalid    schedule 23.10.2012
comment
Вы должны ответить на свой вопрос и принять свой ответ, чтобы закрыть его :)   -  person Burhan Khalid    schedule 23.10.2012
comment
@ user94628 Имейте в виду, Alex MacCaw заявил, что Juggernaut устарел: blog.alexmaccaw.com/killing -a-library   -  person K Z    schedule 24.10.2012
comment
Он говорит, потому что события, отправленные сервером, выполняют тот же запрос. Но я думал, что SSE не работают с flask. Можно ли использовать джаггернаут?   -  person user94628    schedule 24.10.2012
comment
@ user94628 да, в основном проект не будет сильно обновляться в будущем. Если вас это устраивает, сделайте это.   -  person K Z    schedule 24.10.2012
comment
Вы когда-нибудь находили решение? У меня похожая проблема.   -  person tmthyjames    schedule 14.12.2014
comment
@tmthyjames, это было давно, но я нашел это полезным: фрагмент фляги http://flask.pocoo.org/snippets/80/. Хотя в конечном итоге я решил использовать Tornado framework вместе с websockets для отправки данных клиенту с сервера.   -  person user94628    schedule 14.12.2014


Ответы (1)


Вы можете сделать это с помощью gevent + socketio.

person K Z    schedule 23.10.2012
comment
Спасибо. Я посмотрю ссылки, которые вы дали. - person user94628; 23.10.2012