【问题标题】:How does in-browser chat work?浏览器内聊天如何工作?
【发布时间】:2010-11-16 05:07:01
【问题描述】:

只是好奇。在浏览器中聊天到底是如何工作的?通常,如果用户访问网页,他/她的网络浏览器会请求页面内容。服务器产生输出并将其发送到用户的计算机。但是在聊天时,情况有点相反(不完全是)。不是用户从某个服务器请求聊天消息,而是直接发送它的服务器。现在,使用“普通”服务器实现这一点非常简单,但是服务器将其发送到浏览器的事情直接让我感到困惑。发布消息部分很清楚,很简单。您只需使用 ajax 或其他方式将数据发布到服务器。但是另一台计算机如何立即“知道”一条消息已写入它?很明显,它必须是服务器在写入后立即将其发送到另一台计算机。但不知何故,这在我的大脑中并没有计算出来。在我的脑海里,浏览器只请求东西,它不只是得到它们。你具体是怎么做到的?

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

【问题讨论】:

    标签: browser chat


    【解决方案1】:

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

    【讨论】:

    • 这是有道理的,这就是我认为它的工作原理。间隔很小的 AJAX 请求。但是,在研究 google talk 的工作原理(使用 firebug)时,我发现当朋友给我输入消息时,我的计算机没有发出任何请求,但消息却显示出来了。
    • 您通常可以强制它在长时间保持连接打开的情况下工作,并且时不时地将一条消息滴入管道。您必须处理超时,然后重新建立连接。
    • 他们是否使用服务器发送的事件?
    【解决方案2】:

    看看Comet

    【讨论】:

      【解决方案3】:

      它使用AJAX - 运行在 GMail 用户浏览器上的客户端 javascript 发送和接收来自 Google 服务器的消息,并将它们写入浏览器窗口 - 无需重新加载页面。

      【讨论】:

        【解决方案4】:

        Orbited 是实现这一点的好方法,它使用彗星方法。可以找到教程here

        有人提到了ajax轮询,但是comet is always better than polling。好吧,这只是一个耸人听闻的标题,但彗星肯定更合适,并且可以减少服务器端的压力,并具有正确的后端。

        【讨论】:

          【解决方案5】:

          我开发了一个类似于 facebook 聊天技术 (http://chatsign.com) 的浏览器聊天。它不是推送技术,而是比轮询更好的技术,它称为 ajax 长轮询。

          有关 ajax 长轮询的更多信息,您可以做一些研究或访问:http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery

          【讨论】:

            【解决方案6】:

            现代聊天应用程序使用 SSE(服务器发送事件:html5 的一个特性)向浏览器发送新消息

            【讨论】:

            • 这并不能真正回答它的工作原理和实现方式。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-03-31
            • 1970-01-01
            • 2017-06-30
            • 1970-01-01
            • 2011-05-24
            • 1970-01-01
            • 2019-07-11
            相关资源
            最近更新 更多