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

Javascript 如何在我的网站上实现实时更新(使用Flask)?,javascript,python,Javascript,Python,我正在使用Flask,我想向用户显示他在网站上的实时访问量 目前,我认为一种方法是,创建一个无限循环,它在每次迭代后都会有一些延迟,并使ajax请求获得当前的访问次数 我也听说过node.js,但是我认为运行另一个进程可能会使其运行的计算机速度变慢(我假设) 如何在我的网站上实现实时更新?有没有办法用烧瓶来做这个 提前谢谢你 您正在寻找的是WebSocket 嗯,有很多可能: 1) 轮询-这正是您所描述的。无限循环,不时发出AJAX请求。很容易实现,使用Flask很容易完成,但是效率很低-消耗大

我正在使用Flask,我想向用户显示他在网站上的实时访问量

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

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

如何在我的网站上实现实时更新?有没有办法用烧瓶来做这个


提前谢谢你

您正在寻找的是WebSocket


嗯,有很多可能:

1) 轮询-这正是您所描述的。无限循环,不时发出AJAX请求。很容易实现,使用Flask很容易完成,但是效率很低-消耗大量资源和规模非常大-这使得它成为一个非常糟糕的选择(不惜一切代价避免它)。你要么用它杀死你的机器,要么通知期(轮询间隔)太长,这将是一个可怕的用户体验

2) 长轮询—一种技术,客户端发出AJAX请求,但服务器仅在通知可用时响应该请求。收到通知后,客户机立即发出新请求。您将需要一个定制的web服务器来完成此任务-我怀疑它是否可以用Flask完成。这比民意调查要好得多(许多真正的网站都使用它),但效率可能会更高。这就是为什么我们现在有:

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

4) 其他东西,如Flash、Silverlight或其他HTTP技巧(分块编码):与no 3基本相同。虽然更难维护

因此,正如您所看到的,如果您想要比轮询更优雅(和高效)的东西,则需要一些认真的准备

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


至于语言:不管这是Node.js还是任何其他语言(比如Python)。选择一个你感觉更好的。然而,我知道有一种强烈的倾向是在这样的项目中使用Node.js,因此在互联网上可能会有更多合适的库。也许不是。Python有一个例子和/或专门用于此(可能更多)。

在我看来,实现前端UI实时数据流的最佳选择是使用pubnub之类的消息服务。他们为您想要使用的任何语言提供了库。基本上,您的用户界面订阅数据通道。创建数据的东西然后发布到该通道,所有订阅者都会很快收到发布。它的实现也非常简单

您可以使用并专门用于在线状态检测。它提供了以下关键功能:

  • 实时跟踪用户和设备的在线和离线状态
  • 占用率实时监控用户和机器的存在
  • 立即更新所有客户端连接的加入/离开通知
  • 全球范围内的同步服务器
提供可下载的代码,以便在几分钟内建立并运行状态。向您展示使用PubNub presence的不同方式


您可以从获取API密钥开始

运行另一个进程将消耗内存并引发新的安全和维护问题—您不需要它。如果不提供HTML5(websockets)而不是无限循环,请使用
setInterval
+每隔几秒钟(几乎实时)调用一次ajax@furins,这是个糟糕的建议。让我们把你的想法更进一步:他不应该使用
setInterval
,而是应该在每个AJAX响应上发出AJAX请求。它将更加实时。然而,问题是,它将消耗大量资源,规模将非常大。您基本上希望他对自己的服务器进行拒绝服务攻击:D虽然它可以很好地用于开发目的,但应该在生产级别不惜一切代价避免它。我希望OP是针对一小部分用户(例如管理员)提出这种方法。如果这是一个类似实时聊天的东西,那么我邀请读者关注古怪的答案,这涵盖了更多方面+1.