通过 LOAD 监控组件
Monitoring component via LOAD
目前我正在编写一个组件 'collaboration_control' 用于以下目的:
显示任何其他组件写入数据库的任何新闻。这意味着,如果另一个组件(甚至由另一个用户在其自己的环境中以协作方式使用)在 table 'update_information' 中写入相关条目,则协作控制组件应读取并显示它。
我正在通过 LOAD 将协作控制组件加载到空 DIV。然后组件在数据库中寻找任何新的相关条目。当然,此 ping 机制会产生可测量的 CPU 负载。作为一种解决方案,我只是在协作控制组件中使用 time.sleep() 例如 5 秒钟,然后它会重新加载自身以进行下一次查找。但是在这 5 秒休眠期间,该页面的所有其他组件也在休眠 :-(
因此我的问题是:
如何在 web2py 中实现异步查找组件?
在此先感谢您的支持!
此致
克莱门斯
如果您正在使用 time.sleep()
,这听起来像是您导致 Ajax 请求在服务器上暂停,迫使每个请求花费 5 秒。这不是一个好主意,因为它会在整个 5 秒内占用一个 Web 服务器线程。此外,如果您使用的是默认的基于文件的会话,保持打开 Ajax 请求几秒钟将阻止其他 Ajax 请求完成,因为每个请求都会锁定会话文件。要缓解此问题,您可以在 5 秒暂停之前显式解锁会话文件,但有一个更好的方法,即让浏览器在发出 Ajax 个请求之间进行等待。
事实上,LOAD()
助手具有内置功能,可以按指定的时间间隔重新加载自身。例如:
{{=LOAD(..., ajax=True, timeout=5000, times='infinity')}}
以上将每 5 秒重新加载一次组件(但 Ajax 请求将 return 很快,等待通过 Javascript 在浏览器中完成)。
请注意,根据您的流量水平,每隔几秒通过 Ajax 进行轮询可能会给您的服务器带来过多负载。在那种情况下,您可能会考虑更有效的基于推送的替代方案,例如 web2py 的 websocket_messaging functionality or something like Nchan.
目前我正在编写一个组件 'collaboration_control' 用于以下目的:
显示任何其他组件写入数据库的任何新闻。这意味着,如果另一个组件(甚至由另一个用户在其自己的环境中以协作方式使用)在 table 'update_information' 中写入相关条目,则协作控制组件应读取并显示它。
我正在通过 LOAD 将协作控制组件加载到空 DIV。然后组件在数据库中寻找任何新的相关条目。当然,此 ping 机制会产生可测量的 CPU 负载。作为一种解决方案,我只是在协作控制组件中使用 time.sleep() 例如 5 秒钟,然后它会重新加载自身以进行下一次查找。但是在这 5 秒休眠期间,该页面的所有其他组件也在休眠 :-(
因此我的问题是: 如何在 web2py 中实现异步查找组件?
在此先感谢您的支持!
此致 克莱门斯
如果您正在使用 time.sleep()
,这听起来像是您导致 Ajax 请求在服务器上暂停,迫使每个请求花费 5 秒。这不是一个好主意,因为它会在整个 5 秒内占用一个 Web 服务器线程。此外,如果您使用的是默认的基于文件的会话,保持打开 Ajax 请求几秒钟将阻止其他 Ajax 请求完成,因为每个请求都会锁定会话文件。要缓解此问题,您可以在 5 秒暂停之前显式解锁会话文件,但有一个更好的方法,即让浏览器在发出 Ajax 个请求之间进行等待。
事实上,LOAD()
助手具有内置功能,可以按指定的时间间隔重新加载自身。例如:
{{=LOAD(..., ajax=True, timeout=5000, times='infinity')}}
以上将每 5 秒重新加载一次组件(但 Ajax 请求将 return 很快,等待通过 Javascript 在浏览器中完成)。
请注意,根据您的流量水平,每隔几秒通过 Ajax 进行轮询可能会给您的服务器带来过多负载。在那种情况下,您可能会考虑更有效的基于推送的替代方案,例如 web2py 的 websocket_messaging functionality or something like Nchan.