是否有真正的服务器推送http?

时间:2011-11-13 08:43:05

标签: http browser push long-polling

我知道有办法伪造它,轮询(或长时间轮询),但有没有办法让服务器联系浏览器推出信息?

轮询选项会浪费服务器上的资源,并且取决于服务器可以将其锁定(例如apache和iis)。

似乎很多网站都使用长轮询来伪造服务器端推送机制而不是http。将一个真正的推送协议内置到浏览器中不是更好吗?

哪些选项对服务器友好,可以将(虚假或其他)信息推送到网络浏览器?

7 个答案:

答案 0 :(得分:30)

  

我知道有办法伪造它,轮询(或长时间轮询),但有没有办法让服务器联系浏览器推出信息?

必须首先由客户端建立连接到服务器。服务器无法联系Web客户端。

  

轮询选项会浪费服务器上的资源,并且取决于服务器可以将其锁定(例如apache和iis)。

这是对的。 频繁轮询效率低下这是我们迁移到具有持久连接的推送世界的原因之一。 WebSockets将是最佳解决方案。我为Pusher工作,这是一个托管的实时WebSocket解决方案,我们已经看到该社区推动了这项技术的大量应用,并认为它是解决资源和实时通信问题的最佳解决方案。

  

似乎很多网站都使用长轮询来伪造服务器端推送机制而不是http。将一个真正的推送协议内置到浏览器中不是更好吗?

是的,这就是我们现在拥有WebSockets的原因。 Web浏览器的HTTP解决方案最终是一种破解,并且在浏览器之间不一致(以相同的方式)。

  

哪些选项对服务器友好,可以将(虚假或其他)信息推送到网络浏览器?

  • HTTP长轮询:连接保持打开状态,直到服务器有新信息。 注意:这与标准轮询不同,对新信息的请求可能是完全浪费时间。
  • HTTP Streaming :这可能是您正在寻找的解决方案(回答HTTP问题)。使用这种技术,连接保持打开状态,新的信息可以通过现有连接从服务器推送到客户端,而不会像HTTP Long-Polling一样关闭和重新打开连接。
  • HTTP / 2服务器推送:另一种从服务器推送到客户端的标准化机制。这些被称为“推送响应”,浏览器可以缓存这些。
  • WebSockets :通过网络浏览器(或任何网络客户端)内的单个TCP连接进行全双向和全双工通信。

相关信息和资源:

  1. 您可以将服务器发送事件(EventSource API)视为HTTP长轮询和HTTP流的标准化。
  2. HTTP/2 Server Push

答案 1 :(得分:1)

嗯,没有。

您的浏览器不会侦听传入的连接。

你也不希望它能够。我们有足够的漏洞。

答案 2 :(得分:0)

如果您正在使用像Adobe Flex这样的RIA技术,我相信“服务器推送”(AMF消息传递)的Flex版本将满足您对服务器推送的定义。

当然你也可以做原始的ajax-y(hacky)轮询方法,但除非你被迫,否则没有理由。

答案 3 :(得分:0)

你不需要“假装”任何东西。 Flash有一个非常好用且功能很好的Socket对象可以很好地运行,你可以编写一个小小的Flash应用程序来说明网页,所以除了与服务器的通信之外你不必在Flash中做任何事情。 (如果您更喜欢用HTML构建页面)。当然,你需要一个服务器端套接字监听器,但这些也很容易拼凑在一起。关于如何实现整个事情的大量文档在线....这是我发现的第一个例子(没有仔细看,但看起来它会很好用)。 http://www.giantflyingsaucer.com/blog/?p=205

答案 4 :(得分:0)

我认为WebSockets(参见http://en.m.wikipedia.org/wiki/WebSocket)是真正的推动,所以答案是:它取决于浏览器。如果您需要广泛的兼容性,那么今天您可以做的最好的是JavaScript库,它将为其运行的浏览器选择最佳可用协议(例如https://github.com/ffdead/jquery-graceful-websocket)。但是您希望服务器友好,并且支持多种协议不是服务器友好的。目前最先进的技术是,在浏览器中运行很酷的东西是工程密集型的。

答案 5 :(得分:0)

正如其他人所说,服务器无法在没有客户端请求的情况下联系客户端(在常规HTTP上)。

但如果您正在为推送notificatinons 寻找干净的解决方案,请查看Server-Sent Events。它是常规HTTP,可与大多数支持HTTP 1.1的浏览器无缝连接。

SSE仅适用于单一方向(服务器 - >客户端),这是推送通知的主要机制。对于客户 - >服务器通信你总是可以使用Ajax。我在Which technology for realtime communication for a web app?

中对此进行了总结

答案 6 :(得分:0)

从问题被问到的时候,技术可能已经发展了......我偶然发现了这个问题。

WebPush在大多数浏览器中都可用,并且有几个推送通知提供程序将信息从服务器发送到浏览器。除了像Safari这样的少数浏览器之外,还可以开发处理程序,可以在通知到达时调用这些处理程序并在客户端浏览器上执行某些操作。