14

我正在构建一个需要相对恒定的数据库轮询的网页组件。我可以看到两种不同的方法,我想知道其中一种是否比其他方法更好,或者我是否缺少第三种选择。

1) 每 1 或 2 秒发送一次 AJAX 请求以检查更新。无论是否有新数据,每个请求都会立即返回。
2) 触发一个 AJAX 请求,该请求在接收到数据或发生超时之前不会返回。在其中任何一个发生时,它都会触发下一个请求。(我认为这称为长轮询?)

数据库查询的数量将与任何一个相同,但使用 #2 时,从浏览器发出的请求会更少,这可以节省带宽和客户端资源。对于服务器,最好让单个 PHP 请求保持活动状态并在查询之间休眠,还是每隔几秒启动一次,轮询数据库,然后关闭?还是没有区别,我对此压力太大了?

编辑:我想我还应该声明这是一个更大的网络应用程序的聊天小部件。通信中的轻微延迟不会杀死用户,因为聊天是次要功能。

4

2 回答 2

8

长轮询将比轮询更好地扩展(即更少的服务器负载),同时提供更好的响应时间。

如果您的收件人进行轮询,则消息的平均行程时间将是您轮询间隔的一半。

使用长轮询,它是即时的——服务器只有在无话可说时才等待。

如果您正在做聊天消息,请进行长轮询;它是一个可用性的东西。

长轮询的缺点是实现起来更复杂;但它并没有那么复杂,并且被广泛实施。因此,如果您不能为您选择的网络服务器使用现成的框架,您可以着手合理地编写一个框架,并且您会得到它的工作。

于 2010-10-01T18:58:59.367 回答
2

您还可以查看websockets ,这是最新浏览器的一部分(或通过您放在页面上的Flash 文件进行模拟)

于 2010-10-01T18:34:40.580 回答