WebSocket 简单了解

WebSocket

html 页面在刚刚开始出现的时候是静态的,不能进行交互,直到Ajax的出现,可是全部的请求都必须由客户端发起,服务端响应,若是服务端有最新消息,难以发送到客户端去,在WebSocket 基数出现前,为了让客户端可以即时的获取服务端的数据,通常采用以下三种方案:html

  1. 轮询

这是最简单的一种解决方案,客户端在固定的时间间隔下,不停的向服务端发送请求,查看服务端是否有最新的数据,服务端若是有最新的数据则返回给客户端,服务端若是没有则返回一个空的 json 或者 xml 文档,这种方式实现简单,可是弊端明显,会有大量无效请求,浪费服务端资源。web

  1. 长链接

长链接有点相似于轮询,不一样的是服务端不是每次都会响应客户端的请求,只有在服务端有新数据的时候才会响应客户端的请求,这种方式节省资源,可是也存在一些问日,好比:1. 若是浏览器在服务器响应以前有新数据要发送就只能建立一个新的并发请求,或者先尝试断掉当前请求而后再建立新的请求。2. TCP和HTTP 规范中都有链接超时,因此长链接蹦年一直持续,客户端和服务端的链接须要按期的链接和关闭再链接。json

  1. Applet 和 Flash

Applet 能够内嵌到浏览器中去执行,可是浏览器必须可以运行Java或者Flash,不管是Applet仍是Flash都存在安全问题,随着Html5在标准浏览器中普遍支持,Flash下架已经被提上日程跨域

WebSocket特色

  • HTTP/1.1 的升级特性

在全部的 HTTP 客户端均可以在请求头中包含 Connection:Upgrade,这个表示客户端但愿升级请求协议。咱们须要在 Upgrade 头中指定一个或多个协议的列表,这些协议必须兼容HTTP/1.1 协议,服务器收到请求后,若是接受升级请求,那么将会返回一个101的状态码,表示转换请求协议,同时在 Upgrade 头中使用单个值。最大的好处就是最终使咱们可使用任意的协议,在升级握手完成以后,创建一个Socket链接。浏览器

  • 使用 HTTP/1.1升级的WebSocket协议

一个WebSocket 请求首先使用非正常的HTTP请求以特定的模式访问一个URL,这个URL有两种模式,分别是ws和wss,对应 http 和 https。请求头中除了Connextion:Upreade 以外还有一个 Upgrade:websocket,他们共同告诉服务器将链接升级为WebSocket这样一种全双工协议。如此,在握手完成以后,文本消息或者其余二进制消息就能够在两个方向上进行发送,而不须要关闭和重建链接。安全

  • WebSocket 协议的优点
1. WebSocket 链接在端口80(ws)或者443(wss)上建立,与HTTP使用的端口相同,基本上全部的防火墙都不会阻塞WebSocket链接
2. 使用HTTP协议进行握手,所以它能够天然而然的集成到网络浏览器和HTTP服务中
3. ping 和 pong 将被反复发送,进而保持WebSocket 链接几乎一直处于活跃状态。
4. 当消息启动或者到达时,服务端和客户端均可以知道
5. 链接关闭时将发送一个特殊的关闭消息
6. 支持跨域,能够避免Ajax的限制
7. 当握手完成后就不存在链接数每一个主机名两个链接的限制了,由于此时链接已经再也不是HTTP协议了
复制代码
  • WebSocket的用途

相关文章
相关标签/搜索