我正在构建需要相对不变的数据库轮询的网页组件。我可以看到两种不同的方法,我想知道其中一种方法是否优于其他方法,或者我是否缺少第三方案。
1)每隔1或2秒发送一次AJAX请求以检查更新。无论是否有新数据,每个请求都会立即返回 2)触发单个AJAX请求,该请求在收到数据或发生超时之前不会返回。在其中任何一个发生时,它会触发下一个请求。 (我认为这称为长轮询?)
数据库查询的数量与之相同,但使用#2,从浏览器触发的请求数量会减少,这可以节省带宽和客户端资源。对于服务器,最好让一个PHP请求保持活动状态并在查询之间休眠,或者每隔几秒触发一次,轮询数据库,然后关闭?或者没有区别,我对此太过强调了吗?
编辑:我想我还应该声明这是一个更大的网络应用程序的聊天窗口小部件。通信的轻微延迟不会杀死用户,因为聊天是次要功能。答案 0 :(得分:8)
长轮询比轮询更好地扩展(即减少服务器负载),同时提供更好的响应时间。
如果您的收件人进行了轮询,则邮件的平均旅程时间将是轮询间隔的一半。
通过长轮询,即时 - 服务器只在没有什么可说的时候等待。
如果您正在进行聊天消息,请进行长时间轮询;它是一个可用性的东西。
长轮询的缺点是实施起来更复杂;但它并没有那么复杂,而且它得到了广泛的实施。因此,如果你不能为你选择的网络服务器使用一个现成的框架,你可以开始合理地编写一个框架,然后你就可以使它工作。
答案 1 :(得分:2)
您还可以查看websockets,这是最新浏览器的一部分(或通过您放在网页上的Flash file进行模拟)