Ajax聊天轮询带宽效率

7
我写了一个小型的Web应用程序,基本上是一个由浏览器驱动的JQuery聊天客户端。为了获取帖子,我正在使用AJAX请求轮询服务器,然后附加任何新的回复。我担心在不失去实时感的情况下尽可能地提高效率。 http://darklightweb.co.uk/RealTime/ 我看不到任何中断的可能性,所以我每5秒轮询一次页面,如果没有新帖子可用,则返回空内容以保持数据传输的空闲状态。如果有消息,则发送队列中的顶部消息,并在Ajax请求完成后立即再次检查,直到消息队列为空。
还有其他使这个应用程序尽可能低带宽的提示或可能的替代实现吗?
5个回答

11

使用轮询可能不是实现聊天的最佳方案 - 我建议查看JQuery的实现 COMET,它保持与客户端的开放连接,并从服务器“向下”推送更新,也相当可扩展


4
有人知道Stack Overflow在你编写答案时是否使用轮询来查找更新,例如“已添加2个新回答-点击此处以显示它们”?还是它使用像彗星一样的某种“推”系统? - Lotus Notes

4
我认为对于聊天应用程序,您可以使用反向Ajax

Reverse Ajax refers to an Ajax design pattern that uses long-lived HTTP connections to enable low-latency communication between a web server and a browser. Basically it is a way of sending data from client to server and a mechanism for pushing server data back to the browser.1

This server–client communication takes one of two forms:

* Client polling, the client repetitively queries (polls) the

server and waits for an answer. * Server pushing, a connection between a server and client is kept open, the server sends data when available.

Reverse Ajax describes the implementation of either of these models, or a combination of both. The design pattern is also known as Ajax Push, Full Duplex Ajax and Streaming Ajax.

并且

moo-comet

Request.Comet是一个简单的javascript类,可以轻松创建跨浏览器的Comet(反向Ajax)应用程序。它提供了客户端和服务器之间的实时数据传输,并可与任何服务器端语言一起使用。


还有一个逆向 Ajax(Comet)的 JQuery 实现,因此使用 moo-comet 可能不如 Baxter 使用 JQuery 方便(请参见我的答案中的链接)。 - msp
谢谢,非常好的答案,但我更愿意坚持使用一个JS框架。 - Baxter

1

我写了一个几乎完全相同的应用,以便在各种雇主使用严格的网络过滤时方便工作中的朋友们进行通信。

我发现这些轮询请求传输的数据量极小,很少超过每个已登录用户1kb/s,通常要少得多,因为你只轮询每5秒一次。

带宽真的是一个问题吗,还是你提前进行了优化?


你是不是过早地进行了优化? 该死,被识破了。 - Baxter

1

如果你决定不采用COMET方法,那么我会和你做一样的事情,除非队列包含多条消息,然后它们一次性发送。这样你每5秒只轮询一次,没有多余(也没有少)。当然,与100个连接的人相连,这仍然导致每秒20个请求,因此您应该尝试优化服务器端,以使每个请求使用尽可能少的服务器资源(CPU / RAM / time)。在这里缓存是你的朋友。

我不会担心带宽,因为聊天消息通常都很短,而且你的请求也很小。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接