通过Javascript不断查询服务器 – 好主意?

我有一个小网站,大约有5-10名管理员。 我已将其设置为监视每个管理员正在做什么(添加项目,删除项目等)。 我的管理面板中有一个列表,显示集体管理部门执行的前10个活动。 今天,我决定每30秒进行一次自我更新。

我的问题很简单:这样做有什么问题吗? 我正在为每个请求调用一小段文本,并且请求可能一次只能在3台或4台计算机上运行(反映登录的并发管理员数量)。

$(document).ready(function(){ setInterval("activity()", 30000); }); function activity() { $("#recent_activity").load("../home/login #recent_activity .data"); } 

每个请求生成以下(或类似 – 仅10行)。

 

jsampson

logged out

28 minutes 27 seconds ago

jdoe

logged in

29 minutes 45 seconds ago

每30秒3-4个用户根本不是很多。 即便有300名用户也不会这么做。

您可能想要查看以下问题:

  • 我应该使用Ajax Push还是Pull
  • 简单长轮询示例代码

也可以缓存它, 特别是如果生成页面的查询计算量很大 ,但是当然要考虑在显示的最新内容中需要什么样的延迟,这是明智的。

您应该缓存此值,并且每30秒仅更新一次缓存。

不,应该没有任何问题。 对于我在公司内部网门户网站上写的通知系统,我每隔1分钟做同样的事情。 老实说,任何Web服务器都应该能够处理这个问题。

实际上并没有比他们更糟糕(事实上,明显更好),比如每30秒刷新一次浏览器……考虑到数据传输的显着减少,它可能会比刷新它的10-20倍。 ..或者,每5-10分钟刷新一次相同的带宽。 🙂

我认为没问题。 运行规模更大的站点(例如Betfair)每个连接的客户端每分钟使用数百个xhr呼叫。 显然他们有更大的硬件基础设施,但浏览器应对得很好。

我的网站使用较小的间隔,它们可以扩展到从sinlge网络服务器运行的几百个并发用户。

我不认为这会造成问题。

我会说这主要取决于查询的成本。

虽然现在用户数量很少,但总会如此吗?

正如altCognito指出的那样 – 来自此网站的流量不太可能成为问题。

我唯一要检查的是,这需要的数据库负载是否会成为一个问题。 IE浏览器。 如果这是由需要一些时间来运行的查询提供的,那么它将导致问题。 如果是这种情况,我建议在数据中添加一些缓存,或者在内存而不是DB中维护数据(仅在启动时从数据库加载,并将内容添加到此服务器内存列表中他们发生了)。

对替代方案进行权衡。 如果每个用户每30秒刷新一次页面,加载整个页面,服务器端处理量和生成的流量将远远大于刷新“有趣的部分”。

这就是AJAX的用途。

你看到Google Wave预览了吗? 对于这么少的数字,这不是问题,特别是管理员会知道这一点。 (这并不像你给某些访客的CPU或移动互联网连接带来了一些负担。)

很多用户不打算关闭你的服务器。

如果你真的关心表演,我会给你2个建议:

  • 使用JSON将数据发送到客户端,它将比格式化的HTML轻。
  • 对历史数据使用固定日期并计算客户端上的相对时间,它将允许您缓存历史数据。

    {"user":"jsampson","action":"logged out","date":"20090622T170822"}

是的,这丝毫不是问题。

话虽这么说,如果你担心发回的数据量,你可以随时将调用发回一个简单的标志,如果有新数据,那么如果是这种情况则去取数据。

但是,有这么多用户你不应该有任何问题。 一个自定义的基于RoR的留言板我经常使用类似的技术来查看线程是否在您阅读时已更新,并且它有超过100个用户同时点击它没有任何问题。

有几种不同的方法来模拟服务器推送HTTP。 这种技术最近有一个奇特的名字: 彗星 。

如果您的服务器配置允许无限期运行脚本,您可以使用iframe实现面板并使用分块传输(例如,通过PHP的flush() )来创建持久的HTTP连接。 如果连续消息之间的时间间隔很短,则这种解决方案应该具有最小的开销。 对于长间隔,客户端轮询是优选的,因为不必维护TCP连接。

我觉得你做的很棒。

如果我正在做这个项目,我将从你拥有的东西开始并添加一个setTimeout()事件来增加每秒的分钟/秒显示。

用户会认为显示是实时的,他们可能永远不会点击页面刷新。

每隔30秒就更新一次的危险是,每当他们将注意力转向它时,有些人会反复点击“最新”。

还要考虑特别标记任何时间少于五分钟的东西。 并且登录了颜色编码而不是注销。 人们“扫描”会更容易,因为他们可以在不阅读所有文本的情况下选择更改。