首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过负载监测组件

通过负载监测组件
EN

Stack Overflow用户
提问于 2017-02-22 13:00:11
回答 1查看 81关注 0票数 0

目前,我正在编写一个组件“collaboration_control”,目的如下:

显示任何其他组件在数据库中写入的任何新闻。这意味着,如果另一个组件(即使是另一个用户在自己的环境中以协作方式使用)在表'update_information‘中写入相关条目,协作控制组件应该读取并显示它。

我正在通过加载到一个空的DIV加载协作控制组件。然后,组件将在DB中查找任何新的相关条目。当然,这种ping机制会产生可测量的CPU负载。作为一种解决方案,我只是在协作控制组件中使用了5秒的time.sleep(),然后重新加载自己进行下一次查找。但是在这5秒的睡眠时间里,页面的所有其他组件也在休眠:

因此,我的问题是:如何在web2py中实现异步查找组件?

谢谢您的支持!

向克莱门斯问好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-22 17:25:54

如果您使用的是time.sleep(),听起来就像是导致Ajax请求在服务器上暂停,迫使每个请求花费5秒时间。这不是一个好主意,因为它将占用整个5秒的web服务器线程。此外,如果使用默认的基于文件的会话,将Ajax请求打开几秒钟将阻止额外的Ajax请求完成,因为每个请求都会锁定会话文件。为了缓解这个问题,您可以在5秒暂停之前显式地解锁会话文件,但是有一种更好的方法,即让浏览器在发出Ajax请求之间进行等待。

实际上,LOAD()助手具有内置功能,可以在指定的时间间隔重新加载自己。例如:

代码语言:javascript
复制
{{=LOAD(..., ajax=True, timeout=5000, times='infinity')}}

上面的代码将每5秒重新加载组件(但是Ajax请求将快速返回,等待将通过Javascript在浏览器中完成)。

注意,根据您的流量级别,每隔几秒钟通过Ajax进行轮询可能会给服务器带来太多的负载。在这种情况下,您可能会考虑一种更有效的基于推送的替代方案,例如web2py的信息传递功能或类似于恩尚的功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42392221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档