我正在使用Flask,我想向用户显示他在网站上实时访问了多少次.
目前,我认为一种方法是,创建一个无限循环,在每次迭代后都有一些延迟,这使得ajax请求获得当前的访问次数.
我也听说过node.js但是我认为运行另一个进程可能会使计算机运行速度变慢(我假设)?
如何在我的网站上实现实时更新?有没有办法用Flask做到这一点?
先感谢您!
嗯,有很多可能性:
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(可能还有很多).