基于浏览器的聊天需要特殊技术吗?

时间:2010-04-07 05:43:41

标签: chat livechat

this post上,我读到了有关XMPP的用法。这是必要的,更重要的是,我的主要问题是扩展:只使用标准的HTTP和浏览器技术(例如PHP和JS,或者RoR和JS)可以有效地构建聊天服务器和客户端等)?或者,最好是坚持像XMPP这样的旧协议找到一种方法将它们与我的应用程序集成?

我通过LiveHTTPHeaders和Firebug查看CampFire大约5分钟,似乎使用Ajax发送请求,直到另一次聊天才会回复。这只是CampFire在服务器上打开一个新线程来监听更新,然后在线程听到更新时返回对请求的响应吗?我注意到他们正在请求特定的端口(8043,如果内存为我服务),这让我觉得他们正在做的事情比我提到的更复杂。此外,请求的网址以/tcp/开头,我觉得这很有趣。

注意:我不希望在所有会议室中同时有超过150个用户进行实时聊天。据我所知,如果我为CampFire等数千名并发用户构建托管付费服务,我应该花时间研究特殊技术,而不是试图在我的应用程序中以简单的方式重新发明轮子。

此外,如果您打算使用服务器轮询进行此操作,您会多久调查一次,以便在不关闭服务器的情况下最大化响应?

2 个答案:

答案 0 :(得分:4)

该技术被广泛称为Comet,据说这是对Ajax 1 的一些热闹的双关语。

XmlHTTPResponse变体似乎是最受欢迎的。

XHR版本本身并非严格的民意调查;正如你所说,客户端连接一个很长的超时,服务器实际上没有发送响应,直到有什么要发送。发送响应后,它会断开连接并重新连接客户端。他们称之为长轮询,因为客户端正在启动连接,但它与传统轮询的不同之处在于,即使没有任何变化,客户端也不会经常连接请求新内容(即“没有”现在有消息吗?没有?如何现在呢?现在怎么样?“)

这更像是试图保持不断下降的连接打开。

是的,它绝对可以使用标准网络技术构建。


1 我更倾向于认为阿贾克斯是一个强大的希腊战士而不是清洁产品,所以我对这个双关语大为赞叹。

答案 1 :(得分:1)

这首先取决于您的网络服务器负载平衡策略。通过无状态介质(HTTP)发布数据的150个并发用户在编写脚本(客户端和服务器端)时肯定是高效的。请记住,聊天应用程序只是许多客户端 - >一种服务器策略,完全适合网络。