【问题标题】:Is there a way using HTTP to allow the server to update the content in a client browser without client requesting for it?有没有办法使用 HTTP 来允许服务器在客户端浏览器中更新内容而无需客户端请求?
【发布时间】:2011-07-02 21:46:16
【问题描述】:

通过发送 jQuery ajax 请求和更新新内容来更新界面非常容易。但我需要更具体的内容。

我想在没有客户请求的情况下将响应发送给客户,并在他们在服务器上发现新内容时更新内容。无需每次都发送 ajax 请求。当服务器有新数据时,它会向每个客户端发送响应。

有没有办法使用 HTTP 或浏览器中的某些特定功能来做到这一点?

【问题讨论】:

    标签: http network-protocols


    【解决方案1】:

    Websockets、Comet、HTTP 长轮询。

    【讨论】:

      【解决方案2】:

      它具有名称服务器推送(您也可以在名称 Comet 技术下找到它)。使用这些关键字进行搜索,您会找到大量示例、工具等。不需要特殊的协议。

      【讨论】:

        【解决方案3】:

        啊啊!您正在尝试打破网络的原则 :) 您看看网络是否是纯 MVC(模型-视图-控制器),“服务器”实际上可以向客户端发送消息并要求他们更新。问题是服务器可以进行负载平衡,并且可以将相同的请求发送到不同的服务器。现在,如果您要将消息发送回客户端,您将必须知道谁都连接到服务器。假设该站点非常受欢迎,并且您每天有大约 100,000 人连接到它。实际上,您必须存储他们每个人的 IP,以了解他们在 Internet 上的位置并能够“推送”他们的消息。

        注意事项:

        • 如果他们不再浏览您的网站怎么办?您会看到,如果您关闭浏览器,目前无法自动注销。如果您已注销,服务器需要在固定超时后进行检查(或者您在每个响应中发送一个新的随机数以防止服务器进行该检查)
        • 系统重启/崩溃等情况如何?您将丢失您一直在跟踪的所有 IP,然后您又回到了原点 - 您有与您联系的人,但在您收到新请求之前,您无法真正“发送”他们可能期望的数据根据您的模型。
        • 让我们以 facebook 的新闻提要或右上角附近的“最新”链接为例 - 有时当您浏览墙时,您会看到最新消息旁边的数字上升或出现了新的“提要”你墙柱的顶部!客户端定期向服务器发送请求以找出更新的内容,而不是反过来

        你看,它保持简单和宁静。您可能会觉得客户端“轮询”服务器以提取数据效率低下,您更喜欢推送,但服务器的设计得到了简化:)

        我建议 ajax-pulling 是最好的方法 - 您将计算分配给客户端并保持简单(KIS 原则:)

        当然可以绕开,问题是,值得吗?

        希望这会有所帮助:)

        【讨论】:

          【解决方案4】:

          RFC 6202 可能是一本好书。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-01-19
            • 1970-01-01
            • 2011-10-02
            • 2013-02-06
            • 1970-01-01
            • 2018-04-24
            • 1970-01-01
            • 2017-05-14
            相关资源
            最近更新 更多