【发布时间】:2014-01-08 11:27:50
【问题描述】:
我正在开发一个网络应用程序,用户可以在其中请求服务,并且提供者可以响应他。因此,当用户请求某种服务时,我们的应用程序将向提供者发送通知(要求他响应用户)。 我想做的是:当用户请求服务时,提供者会立即收到通知(就像 facebook 一样)。
实现此目的的一种方法是使用 AJAX 每 5-10 秒向服务器发送一次请求;我们称之为轮询(到目前为止我知道)。但是,这种方法有一些缺陷,我明白了:-
- 由于请求将每 5-10 秒发送一次,因此处理请求和返回空数据(非常频繁)将是服务器的负载。
- 即使没有任何更新,向服务器发送请求也没有用。
- 想象一下,在服务器响应请求后,有人请求服务。因此,提供商必须再等待 5-10 秒才能收到有人请求某事的通知。
所以,我想知道是否有某种技术可以在我们的系统发生更改时立即更新我们的网页,而无需使用 AJAX 轮询请求。
【问题讨论】:
-
听起来你想看看 websockets。我建议开始使用socket.io。不要担心,因为它的节点,有一个服务器规范,你可以用 PHP 构建,你可以简单地使用 socket.io-client
-
正如@jibsales 所说的一个选项是websockets,另一个选项是修改类型的轮询调用长轮询。我会研究两者,看看哪一个更适合你。
-
您的另一个可行的 websockets 替代方案是服务器发送事件。 EventSource 是此 API 的 Javascript 包装器。它们的工作方式与 websocket 类似,只是数据仅来自 服务器,不会再返回。当然你可以做一个 Ajax 帖子来再次发回数据...html5rocks.com/en/tutorials/eventsource/basics
标签: javascript php ajax web polling