如何支持浏览器的服务器推送方法以及 websockets 在其中的作用?
Posted
技术标签:
【中文标题】如何支持浏览器的服务器推送方法以及 websockets 在其中的作用?【英文标题】:How server push approach to browser is supported and role of websockets in that? 【发布时间】:2012-11-19 09:11:49 【问题描述】:我有一个用例,我计划从浏览器轮询到服务器以检查给定客户的任何更新。然后我想 探索推式方法,只要 servlet 在网络服务器上运行,网络服务器(在我的情况下是 tomcat)就可以自动完成 从第三方获取任何更新。我想到的第一个问题是 javaclass 如何知道它必须发送到哪个浏览器客户端 更新。然后我遇到了http://www.gianlucaguarini.com/blog/nodejs-and-a-simple-push-notification-server/ 的链接。 这是演示如何支持推送方法的惊人链接。但我想出了一些基本问题 采用这种方法。它们是:-
1) 浏览器内部是否仅使用 websockets 与 webserver 进行通信,或者他们只是使用 TCP 进行通信? 根据我的理解,浏览器仅使用 TCP 协议,尽管它受到 chrome、mozilla 等一些 brosers 的支持
2) 是否所有浏览器都支持 websocket(示例中由 io.connect('url') 提供),特别是 IE7、IE8 据我了解
3)要支持浏览器上的推送方式,websockets是唯一的方法吗? 据我了解,websockets主要用于将数据从webserver推送到浏览器(仅限那些支持websockets的) 对于这第一个浏览器需要与 webserver 建立 websocket 连接。现在服务器将使用创建的 websocket 发出任何 数据到浏览器。对吧?
4) websocket 是否有可能自动断开连接,例如请求超时或响应等待很长时间?
5)是否需要显式断开socket,否则浏览器关闭时会自动关闭?
如果回复是逐点的,那将非常有帮助。
【问题讨论】:
【参考方案1】:WebSocket 协议是 TCP 协议。只是它以HTTP开头,然后可以升级为TCP。
Internel Explorer 应该在版本 10 中支持 WebSockets。其他主要浏览器(Chrome、FireFox、Safari、Opera)完全支持它。
还有许多其他可能性。简单轮询、长轮询(你发出一个 ajax 请求,服务器只有在他有新数据时才响应)、隐藏无限 iframe、使用 flash 等。
是的。
一旦使用端口的应用程序(在这种情况下是浏览器)被终止,所有连接也会终止。
【讨论】:
关于答案中的第三点,那仍然是拉式方法而不是推式方法。对吗? 技术上没有太大区别。除了轮询之外,何时发送数据取决于服务器。 在轮询的情况下,我们实际上是在请求完成时从浏览器发出请求,这在理论上只是一个拉动概念。根据我的理解,真正的推送方法是,浏览器不必向服务器发出请求(一旦打开套接字)。服务器负责将数据推送到浏览器客户端 @MSach 客户端始终必须进行初始连接。这就是为什么在技术上没有区别。区别在于支持和性能。 很抱歉进行了长时间的讨论,但想弄清楚这个概念。我同意客户总是必须建立一个初始连接。但是如果轮询客户端向浏览器发出重复请求,这在服务器推送的情况下不会发生以上是关于如何支持浏览器的服务器推送方法以及 websockets 在其中的作用?的主要内容,如果未能解决你的问题,请参考以下文章