WebSocket 是 HTML5 开始提供的一种浏览器与服务器间进行全双工通信的网络技术,WebSocket通讯协议于2011年被IETF定为标准 RFC6455 , WebSocket API 被W3C定为标准.web
在 WebSocket API中,浏览器和服务器只须要作一个握手的动做,而后浏览器和服务器之间就造成了一条快熟通道,二者就能够直接互相传送数据了,WebSocket基于TCP双向全双工进行消息传递,在同一时刻,既能够发送消息,也能够接受消息,相比于HTTP的半双工协议,性能获得很大的提高.浏览器
创建 WebSocket 链接时,须要经过客户端或者浏览器发送握手请求, 消息示例以下:安全
为了创建一个WebSocket链接,客户端浏览器首先要向服务器发起一个HTTP请求,这个请求和一般的HTTP请求不一样,它包含了一些附加的头信息, Upgrade: WebSocket 代表这是一个申请协议升级的HTTP请求,服务器解析这些附加的头信息,而后生成应答信息返回给客户端,客户端和服务端的WebSocket链接就创建起来了,双发能够经过这个链接诶通道自由地传递信息,而且这个链接会持续存在直到客户端或者服务端的某一方主动关闭链接服务器
请求消息中的 "Sec-WebSocket-Key" 是随机的, 服务端会用这些数据来构造出一个 SHA-1 的信息摘要,把 "Sec-WebSocket-Key" 上一个魔幻字符串 , 使用 SHA-1加密,而后进行BASE-64编码,将结果做为 "Sec-websocket-Accept" 的值,返回给客户端.websocket
握手成功以后,服务端和客户端就能够经过 "message" 的方式进行通信了,一个消息由一个或多个帧组成, WebSocket 的消息并不必定对应一个网络层的帧,他能够被分割成多个帧或者被合并.网络
内容初自 : <Netty 权威指南>socket