烧瓶框架可以将实时数据从服务器发送到客户端浏览器吗?
Posted
技术标签:
【中文标题】烧瓶框架可以将实时数据从服务器发送到客户端浏览器吗?【英文标题】:Can flask framework send real-time data from server to client browser? 【发布时间】:2012-10-13 08:56:46 【问题描述】:我想知道flask(如果有的话)如何执行长轮询,以便服务器可以通过连接向客户端发送数据。例如,如果服务器通过流 api 接收到 twitter 提要,如何将其传递给客户端浏览器?
我认为您不能在这种情况下使用 flask.flash。
谢谢
感谢您提供的示例。我查看了示例,当我尝试为我的代码实现它时,它仍然没有在客户端浏览器中提供实时输出。
我使用 juggernaut 和 redis 以烧瓶 sn-p() 为基础。这是我的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 %
我仍然对为什么什么都没有发送到客户端浏览器感到困惑。
谢谢
【问题讨论】:
有一个flask snippet 正在谈论这件事。 谢谢Burhan,所以如果我按照flask sn-p 然后在客户端和服务器中插入这些代码。我应该能够向客户端发布实时消息。那么这是否意味着我不需要使用gevent和socketio呢?谢谢 就是这个意思。它将为您处理。 你应该回答你的问题并接受你的回答来关闭它:) @tmthyjames,已经很久了,但我发现这很有帮助:flask sn-phttp://flask.pocoo.org/snippets/80/
。最终,尽管我决定使用Tornado
框架和websockets
将数据从服务器推送到客户端。
【参考方案1】:
您可以在gevent
+socketio
的帮助下这样做。
gevent
+socketio
。
a socket.io route in Flask
gevent-socketio
【讨论】:
谢谢。我会看看你提供的链接。以上是关于烧瓶框架可以将实时数据从服务器发送到客户端浏览器吗?的主要内容,如果未能解决你的问题,请参考以下文章