我正在使用Flask,我想向用户显示他在网站上实时访问了多少次。
目前,我认为一种方法是创建一个无限循环,在每次迭代后都有一些延迟,这使得ajax请求获得当前访问次数。
我也听说过node.js但是我认为运行另一个进程可能会使计算机运行速度变慢(我假设)?
如何在我的网站上实现实时更新?有没有办法用Flask做到这一点?
提前谢谢!
答案 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
答案 2 :(得分:1)
在我看来,实现到前端UI的实时数据流的最佳选择是使用像pubnub这样的消息服务。他们拥有您想要使用的任何语言的库。基本上,您的用户界面订阅数据通道。然后,创建数据的内容将发布到该频道,并且所有订阅者都可以非常快速地接收发布。它的实现也非常简单。
答案 3 :(得分:0)
您可以使用PubNub,特别是PubNub presence,尤其适用于在线状态检测。它提供了
等关键功能PubNub Presence Tutorial提供了可以下载的代码,可以在几分钟内启动并运行。 Five Ways You Can Use PubNub Presence向您展示了使用PubNub存在的不同方式。
您可以signing up for PubNub开始使用并获取API密钥。