Ajax聊天轮询带宽效率

我写了一个小的Web应用程序,它基本上是浏览器中的JQuery驱动的聊天客户端,用于获取我用AJAX请求轮询服务器的post,然后附加任何新的回复,我担心这会使其高效尽可能不丢失实时感觉。

http://darklightweb.co.uk/RealTime/

我无法看到任何中断可能的方式所以我每隔5秒轮询一个页面,如果没有新post可以保持数据传输,如果它空闲,如果它确实有一条消息队列被发送出去,一旦Ajax请求完成,我就会再次检查,直到消息队列为空。

关于使其成为尽可能低带宽或可能的替代实现的任何其他技巧?

轮询可能不是实现聊天的最佳解决方案 – 我建议看看JQuery的 COMET 实现 ,该实现保持与客户端的开放连接并从服务器“推送”推送更新,并且也具有很高的可扩展性 。

我认为你可以使用聊天应用程序

反向Ajax

反向Ajax是指使用长期HTTP连接的Ajax设计模式,以实现Web服务器和浏览器之间的低延迟通信。 基本上,它是一种从客户端向服务器发送数据的方式,以及将服务器数据推送回浏览器的机制。 1

此服务器 – 客户端通信采用以下两种forms之一:

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

服务器并等待答案。 *服务器推送,服务器和客户端之间的连接保持打开状态,服务器在可用时发送数据。

反向Ajax描述了这些模型中的任何一个的实现,或两者的组合。 设计模式也称为Ajax Push,Full Duplex Ajax和Streaming Ajax。

武彗星

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

当各种雇主使用严格的网络过滤时,我已经写了几乎完全相同的应用程序,以促进工作中的朋友之间的沟通。

我发现为这些轮询请求传输的数据量很小,每个登录用户很少接近1kb / s,通常情况下,因为您只轮询5s。

带宽真的是一个问题,还是你过早地优化了?

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

我不担心带宽,因为聊天消息通常很短,无论如何你的请求都很小。

为了配合msparer的回复,这里有一篇关于Comet消息率的博客文章,并对聊天应用程序的这种技术进行基准测试:

http://cometdaily.com/2008/10/30/comet-apps-will-not-scale-equally/