我知道有一些方法可以模拟,如轮询(或长轮询),但是否有任何方式让服务器联系浏览器以推送信息?
无论是哪种轮询选项,在服务器上都会浪费资源,并且根据服务器的不同可能会导致服务器卡住(例如Apache和IIS)。
似乎很多网站都在使用长轮询来模拟基于服务器端的HTTP推送机制。难道没有将真正的推送协议内置到浏览器中更好吗?
有哪些服务器友好的选项可以用来向Web浏览器推送(模拟或其他方式)信息?
我知道有一些方法可以模拟,如轮询(或长轮询),但是否有任何方式让服务器联系浏览器以推送信息?
无论是哪种轮询选项,在服务器上都会浪费资源,并且根据服务器的不同可能会导致服务器卡住(例如Apache和IIS)。
似乎很多网站都在使用长轮询来模拟基于服务器端的HTTP推送机制。难道没有将真正的推送协议内置到浏览器中更好吗?
有哪些服务器友好的选项可以用来向Web浏览器推送(模拟或其他方式)信息?
我知道有一些方法可以模拟,例如轮询(或长轮询),但是有没有一种方法可以让服务器联系浏览器以推送信息?
连接必须首先由客户端与服务器建立。没有办法让服务器联系Web客户端。
任何一种轮询选项都会浪费服务器资源,并且根据服务器的不同,可能会锁定它(例如Apache和IIS)。
没错。 频繁轮询效率低下,这也是我们正在转向持久连接的"推"世界的原因之一。 WebSockets将成为此问题的最佳解决方案。 我在Pusher工作,我们提供托管的实时WebSocket解决方案,我们看到由社区推动这项技术的大规模应用,认为这是解决资源和实时通信问题的最佳方案。
看起来很多网站都在使用长轮询来模拟基于HTTP的服务器端推送机制。是否更好地在浏览器中内置真正的推送协议?
是的,这就是为什么现在有了WebSocket的原因。 HTTP解决方案对于Web浏览器而言,最终是一种hack,不能在不同浏览器之间始终以相同的方式工作。
还有哪些选项对服务器友好,可以向Web浏览器推送(虚假或其他)信息?
相关信息和资源:
正如其他人所说,在常规HTTP中,服务器无法在没有客户端请求的情况下联系客户端。
但是,如果您正在寻找用于推送通知的清洁解决方案,请查看Server-Sent Events。它是常规HTTP,并且与大多数支持HTTP 1.1的浏览器无缝配合使用。
SSE仅在单向(服务器->客户端)中起作用,这是“推送通知”的主要机制。对于客户端->服务器通信,您始终可以使用Ajax。我在Which technology for realtime communication for a web app?中总结了这一点。
嗯,不行。
您的浏览器不会监听传入连接。
您也不希望它能够这样做。我们已经有足够的漏洞了。
我认为WebSockets(参见http://en.m.wikipedia.org/wiki/WebSocket)是真正的推送技术,所以答案是:这取决于浏览器。如果您需要广泛兼容性,则今天最好的选择是JavaScript库,它会选择在其运行的浏览器中可用的最佳协议(例如https://github.com/ffdead/jquery-graceful-websocket)。但是,您想要服务器友好型,并且支持多种协议并不友好。当前的技术水平是跨浏览器实现酷炫功能需要大量工程投入。