【发布时间】:2011-07-02 21:46:16
【问题描述】:
通过发送 jQuery ajax 请求和更新新内容来更新界面非常容易。但我需要更具体的内容。
我想在没有客户请求的情况下将响应发送给客户,并在他们在服务器上发现新内容时更新内容。无需每次都发送 ajax 请求。当服务器有新数据时,它会向每个客户端发送响应。
有没有办法使用 HTTP 或浏览器中的某些特定功能来做到这一点?
【问题讨论】:
通过发送 jQuery ajax 请求和更新新内容来更新界面非常容易。但我需要更具体的内容。
我想在没有客户请求的情况下将响应发送给客户,并在他们在服务器上发现新内容时更新内容。无需每次都发送 ajax 请求。当服务器有新数据时,它会向每个客户端发送响应。
有没有办法使用 HTTP 或浏览器中的某些特定功能来做到这一点?
【问题讨论】:
Websockets、Comet、HTTP 长轮询。
【讨论】:
它具有名称服务器推送(您也可以在名称 Comet 技术下找到它)。使用这些关键字进行搜索,您会找到大量示例、工具等。不需要特殊的协议。
【讨论】:
啊啊!您正在尝试打破网络的原则 :) 您看看网络是否是纯 MVC(模型-视图-控制器),“服务器”实际上可以向客户端发送消息并要求他们更新。问题是服务器可以进行负载平衡,并且可以将相同的请求发送到不同的服务器。现在,如果您要将消息发送回客户端,您将必须知道谁都连接到服务器。假设该站点非常受欢迎,并且您每天有大约 100,000 人连接到它。实际上,您必须存储他们每个人的 IP,以了解他们在 Internet 上的位置并能够“推送”他们的消息。
注意事项:
你看,它保持简单和宁静。您可能会觉得客户端“轮询”服务器以提取数据效率低下,您更喜欢推送,但服务器的设计得到了简化:)
我建议 ajax-pulling 是最好的方法 - 您将计算分配给客户端并保持简单(KIS 原则:)
当然可以绕开,问题是,值得吗?
希望这会有所帮助:)
【讨论】:
RFC 6202 可能是一本好书。
【讨论】: