有没有办法使用HTTP来允许服务器更新客户端浏览器中的内容而无需客户端请求它?

时间:2011-07-02 05:26:13

标签: http network-protocols

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

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

有没有办法在浏览器中使用HTTP或某些特定功能?

4 个答案:

答案 0 :(得分:3)

Websockets,Comet,HTTP长轮询。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

注意事项:

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

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

我建议ajax-pulling是最好的方法 - 你正在向客户分发计算并保持简单(KIS原则:)

当然,你可以解决它,问题是,它值得吗?

希望这会有所帮助:)

答案 3 :(得分:1)

RFC 6202可能是一本很好的读物。