从对其他答案的评论来看,我将告诉你为什么,以及一些什么,但不会给你一个解决方案,因为我在“相关”侧边栏中看到了大量的解决方案。您必须选择正确的,并且通过了解“原因”,您将能够做出有根据的决定。
为了让聊天感觉正确,响应必须有一些即时性。随着时间的推移,用户会注意到一秒钟的时间延迟,并给人一种不合时宜的感觉。要在浏览器中进行即时或“实时”响应,需要持久连接,以便当新信息进入时,它会立即显示出来。
由于 HTTP 的请求/响应规范,浏览器中的持久连接很困难。有一些规范可以为浏览器带来持久连接,但这些浏览器并不普遍。未来持久连接将由WebSockets和SPDY提供,这两者都可以在最新版本的 Chrome、Safari 和 FireFox 中使用,但 IE 有点滞后。
持久连接的另一个选项是XMPP。XMPP 是用于 Jabber 聊天客户端的协议。由于它是一个开源实现,它已被移植到许多其他用途。JavaScript 库允许您将浏览器连接到 XMPP 套接字并侦听新消息。我过去看到的方法是将消息发送到 Web 服务器,然后让 Web 服务器将新消息告诉 XMPP 服务器,然后 XMPP 服务器将新消息广播给所有用户。但是,这需要一个 XMPP 服务器,这增加了系统的复杂性。
大多数用户并不处于浏览器版本的前沿,因此您需要能够处理较旧的浏览器。大多数替代方案涉及打开与服务器的长期运行连接,该连接在新数据到达时响应。以下是在旧浏览器中模拟持久连接的方法列表:
- Adobe Flash 插座
- ActiveX HTML 文件 (IE)
- 服务器发送事件 (Opera)
- 多部分编码的 XHR
- XHR 长轮询
这些较旧的方法和 WebSockets 由一个名为Juggernaut的库支持。
UPDATE Juggernaut 已被维护者弃用,原因很充分:现代浏览器通过称为服务器发送事件 (SSE) 的规范支持开箱即用的持久连接(当然 IE 除外)。向后兼容性现在由 polyfills 处理(什么是 polyfill?),正如弃用帖子所指出的,有几个很好的方法可以将 SSE 引入旧版浏览器。