如何在我的网站上实现实时更新(使用Flask)?

时间:2013-12-30 20:36:28

标签: javascript python

我正在使用Flask,我想向用户显示他在网站上实时访问了多少次。

目前,我认为一种方法是创建一个无限循环,在每次迭代后都有一些延迟,这使得ajax请求获得当前访问次数。

我也听说过node.js但是我认为运行另一个进程可能会使计算机运行速度变慢(我假设)?

如何在我的网站上实现实时更新?有没有办法用Flask做到这一点?

提前谢谢!

4 个答案:

答案 0 :(得分:5)

嗯,有很多可能性:

1)轮询 - 这正是你所描述的。无限循环,偶尔发出一个AJAX请求。易于实施,可以使用Flask轻松完成,但效率非常低 - 占用大量资源并且可怕地扩展 - 使其成为真正糟糕的选择(不惜一切代价避免它)。您将使用它来终止您的计算机,或者通知期限(轮询间隔)必须非常大,这将是一个糟糕的用户体验。

2)长轮询 - 客户端发出AJAX请求但服务器仅在通知可用时才响应该请求的技术。收到通知后,客户端立即发出新请求。你需要一个自定义的Web服务器 - 我怀疑它可以用Flask完成。比投票(许多真正的网站使用它)要好得多,但可能更有效率。这就是我们现在拥有的原因:

3)WebSockets - 真正的双向通信。每个客户端都与服务器保持开放的TCP连接,并可以对传入的数据做出反应。但同样:需要一个自定义服务器,只有最现代的浏览器支持它。

4)其他东西,如Flash或Silverlight或其他HTTP技巧(分块编码):几乎与没有3)相同。虽然更难维护。

因此,你可以看到你想要一些比投票更优雅(和更有效)的东西,这需要一些认真的准备。

至于流程:你不应该担心。这不是关于你使用了多少个进程,而是它们有多重。 1写得很糟糕的过程很容易杀死你的机器,而100写得好会很顺利。因此,请确保它的编写方式不会冻结您的机器(我向您保证,它可以在同时用户数量定义的某个点上完成)。

至于语言:无论是Node.js还是任何其他语言(如Python)都无关紧要。选择你感觉更好的那个。但是我知道有很强的趋势将Node.js用于这样的项目,因此在互联网中可能有更多适当的库。或者可能不是。例如,Python有Twisted和/或Tornado专门用于此目的(可能还有更多)。

答案 1 :(得分:4)

您正在寻找的是websockets

http://kennethreitz.org/introducing-flask-sockets/

答案 2 :(得分:1)

在我看来,实现到前端UI的实时数据流的最佳选择是使用像pubnub这样的消息服务。他们拥有您想要使用的任何语言的库。基本上,您的用户界面订阅数据通道。然后,创建数据的内容将发布到该频道,并且所有订阅者都可以非常快速地接收发布。它的实现也非常简单。

答案 3 :(得分:0)

您可以使用PubNub,特别是PubNub presence,尤其适用于在线状态检测。它提供了

等关键功能
  • 实时跟踪用户和设备的在线和离线状态
  • 实时监控用户和机器存在的占用情况
  • 加入/离开通知以立即更新所有客户端连接
  • PubNub Data Stream Network
  • 中使用同步服务器进行全局扩展

PubNub Presence Tutorial提供了可以下载的代码,可以在几分钟内启动并运行。 Five Ways You Can Use PubNub Presence向您展示了使用PubNub存在的不同方式。

您可以signing up for PubNub开始使用并获取API密钥。