2009-10-16 51 views
7

我写了一个小型的Web应用程序,它基本上是浏览器中的JQuery支持的聊天客户端,用于通过AJAX请求轮询服务器,然后附加任何新的回复我担心尽可能提高效率,同时不会失去实时感受。Ajax聊天轮询带宽效率

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

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

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

回答

11

轮询可能不是实现聊天的最佳解决方案 - 我建议看看COMETJQuery's implementation,它保持与客户端的开放连接并将服务器的“更新”推下来,同时也是quite scalable

+0

非常好,谢谢你。 – Baxter 2009-10-16 11:28:00

+4

有没有人知道如果堆栈溢出使用轮询来找出更新,如“添加2个新答案 - 点击这里显示他们”,而你输入自己的答案?还是它使用某种类似“彗星”的“推动”系统? – 2010-11-09 18:53:16

4

我觉得对于一个聊天应用程序,你可以使用

Reverse Ajax

反向阿贾克斯是指使用长寿命HTTP 连接以实现之间的低延迟 通信一个Ajax设计 模式web服务器和 的浏览器。基本上它是 从客户端向服务器发送数据的一种方式,并且 是用于将服务器数据 推回到浏览器的机制。 1

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

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

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

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

moo-comet

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

+0

还有一个针对JQuery的反向ajax(Comet)实现,所以使用moo-comet可能不如Baxter使用JQuery那么方便(请参阅我的答案中的链接) – msparer 2009-10-16 11:24:57

+0

谢谢,很好的回答,但我更喜欢坚持一个JS框架。 – Baxter 2009-10-16 11:27:19

1

我已经写了几乎完全相同的应用程序,以方便在各种雇主使用draconian网页过滤时在工作中的朋友之间的沟通。

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

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

+0

“你是否过早地优化?” 该死的。 – Baxter 2009-10-16 11:25:28

1

如果决定不再继续与COMET方法,那么我会和你一样做,除非队列包含多条消息,那么它们一次全部发送。这样你只能每隔5秒查询一次,不要再查看(也不能少于)。当然,如果连接100个人,这仍然会导致每秒20个请求,所以您应该尝试优化服务器端,以便每个请求尽可能少地占用服务器资源(CPU/RAM /时间)。缓存是你的朋友在这里。

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