Ajax聊天轮询带宽效率

时间:2009-10-16 11:15:52

标签: jquery ajax asp-classic bandwidth

我已经编写了一个小型Web应用程序,它基本上是浏览器中的JQuery驱动的聊天客户端,用于获取我正在使用AJAX请求轮询服务器的帖子,然后附加任何新的回复,我担心制作这虽然有效但不会失去实时感觉。

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

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

关于使其尽可能低带宽或可能的替代实施的任何其他提示?

5 个答案:

答案 0 :(得分:11)

轮询可能不是实施聊天的最佳解决方案 - 我建议您查看JQuery's implementationCOMET,它与客户端建立开放式连接并从服务器向下推送更新'并且也是quite scalable

答案 1 :(得分:4)

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

Reverse Ajax

  

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

     

此服务器 - 客户端通信需要   两种形式之一:

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

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

     

反向Ajax描述了   执行其中任何一个    模型,或两者的组合。该   设计模式也称为Ajax   推送,全双工Ajax和流媒体   Ajax的。

<强> moo-comet

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

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

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