阿贾克斯聊天轮询带宽效率(Ajax chat polling bandwidth efficienc

2019-08-19 03:34发布

我写了一个小型Web应用程序基本上是在浏览器中一个jQuery供电的聊天客户端,以获得职位,我轮询一个AJAX请求的服务器,然后再追加任何新的回复,我很担心使这个高效同时尽量不损失实时的感觉。

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

我看不到任何方式中断是可能的,所以我投票页面每5秒,如果没有新的职位都可以保持数据传输下来,如果它的闲置,如果它有一个消息在顶部的消息不返回任何内容队列发送出去,我只要Ajax请求完成后再次检查,直到消息队列为空。

进行此作为低带宽尽可能或可能的替代的实现中的任何其他提示?

Answer 1:

轮询可能不是实现一个聊天的最佳解决方案-我建议考虑看看JQuery的实施的COMET其持开放的连接到客户端和服务器的“向下”推更新,也相当可扩展性 。



Answer 2:

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

反转Ajax

反转Ajax指的是使用长寿命的HTTP连接,以使web服务器和浏览器之间的低等待时间的通信一个Ajax设计模式。 基本上它是从客户端发送数据到服务器的方式,为推动服务器数据返回给浏览器的机制。 1

这种服务器 - 客户端通信采取两种形式中的一种:

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

服务器,并等待答复。 *服务器推送,服务器和客户机之间的连接保持开放,服务器可用时发送数据。

反向阿贾克斯描述的这两种模式的实施,或两者的组合。 该设计模式也被称为Ajax的推送,全双工Ajax和流阿贾克斯。

武彗星

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



Answer 3:

我已经写了几乎一模一样的应用程序,以方便在工作中的朋友之间的通信时各种雇主使用严厉的Web过滤。

我发现,转移这些轮询请求的数据量是最小的,很少能达到1KB / s的每个登录的用户,通常的方式少,因为你只能是有史以来投票5秒。

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



Answer 4:

如果你决定不走与COMET的方法,那么我会做,你做同样的,除非队列中包含若干消息然后将它们全部发送一次。 这样,你只轮询正是每5秒并没有更多的(也不能少)。 当然,有100人连这仍然导致每秒20个请求,所以你应该尝试以这样的方式优化了服务器端的每个请求花费尽可能少的服务器资源(CPU / RAM /时间)成为可能。 缓存这里是你的朋友。

我不会担心带宽,但因为聊天消息通常很短,您的需求将是微小的反正。



Answer 5:

与msparer的回应一起去,这里是彗星的消息速率AA博客文章和基准测试这种技术用于聊天应用程序:

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



文章来源: Ajax chat polling bandwidth efficiency