2009-08-02 105 views
34

只是好奇。在浏览器中聊天的工作原理是什么?通常,如果用户转到网页,他/她的浏览器会请求页面内容。服务器产生输出并将其发送到用户的计算机。但与聊天有点相反(很不完全)。这不是用户从某个服务器请求聊天消息,而是直接发送它的服务器。现在,使用“普通”服务器实现起来非常简单,但服务器直接将其发送到浏览器会让我感到困惑。发布消息部分很清楚,很简单。您只需将数据发布到服务器,例如ajax或其他。但是另一台计算机如何“立即”知道已经写入了一条消息?一旦写入服务器,它显然应该是服务器发送给另一台计算机的服务器。但不知何故,这不在我脑中计算。在我的大脑中,浏览器只需要请求一些东西,它并不仅仅是获取它们。你究竟如何做到这一点?浏览器内聊天如何工作?

以gmail中的google talk为例。这是如何运作的?它是如何实现的?

回答

11

有一些push technologies,如Comet,但它们没有广泛实施。大多数情况下,这是通过polling与AJAX以一定的时间间隔完成并下载自上次下载的消息以来可用的新消息。

+0

这使得感觉,这就是我认为它的工作原理。 AJAX请求的时间间隔很小。然而,研究谷歌谈话是如何工作的(使用萤火虫),我发现当一个朋友给我发信息时,我的电脑没有提出任何请求,而是显示了信息。 – quano 2009-08-02 19:00:25

+0

您通常可以强制它在保持长时间连接的情况下工作,并且每隔一段时间将一条消息沿管道向下滴流。你必须处理超时,然后重新建立连接。 – Joey 2009-08-02 19:02:27

2

它采用AJAX - 上的Gmail用户的浏览器的JavaScript运行的客户端发送和从谷歌服务器接收邮件,并将其写入到浏览器窗口 - 没有重装需要页面。

4

Orbited是一个很好的实现方法,它使用了彗星方法。你可以找到一个教程here

有人提到阿贾克斯轮询,但comet is always better than polling。那么,这只是一个耸人听闻的标题,但是彗星肯定更合适,并且可以减少服务器端的压力,并减少右后端的负担。

0

现代聊天应用程序使用SSE的(服务器发送事件:HTML5的功能)发送新邮件到浏览器