WebSocket 概述
Websocket是一个持久化的协议
WebSocket是一种规范,是Html5规范的一部分,websocket解决什么问题呢?解决http协议的一些不足。我们知道,http协议是一种无状态的,基于请求响应模式的协议。
WebSocket API 中浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道,两者或可以直接互相传送数据了
WebSocket 基于TCP双向全双工进行消息传递,在同一时刻,即可以发送消息,也可以接收消息。
HTTP 是半双工协议,性能得到很大提升。
Websocket使用和 HTTP 相同的 TCP 端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在 TLS之上时,默认使用443端口。
WebSocket 是独立的、创建在 TCP 上的协议。
Websocket 通过 HTTP/1.1 协议的101状态码进行握手。
WebSocket特点
1 单一的TCP连接,采用全双式模式通信
2对代理,防火墙和路由器透明
3无头部信息,Cookie和身份验证
4无安全开销
5 通过“ping/pong”帖保持链路激活
6服务器可以主动传递消息客户端,不再需要客户端轮询
WebSocket 背景
目前在浏览器中通过HTTP仅能实现单向通信,Comet可以在一定程度上模拟双向通信,但效率较低,并且需要服务器有较好的支持,Flash中的Socket和XMLSocket可以实现真正的双向通信。
WebSocket 生命周期
Java WebSocket API中的WebSocket生命周期
- 打开事件:此事件发生在端点上建立新连接时并且在任何其他事件发生之前
- 消息事件:此事件接收WebSocket对话中另一端发送的消息。它可以发生在WebSocket端点接收了打开事件之后且在接收关闭事件关闭连接之前的任意时刻
- 错误事件:此事件在WebSocket连接或者端点发生错误时产生
- 关闭事件:此事件表示WebSocket端点的连接或者端点目前正在部分的关闭,它可以由参与连接的任意一个端点发出
WebSocket 连接关闭
webSocket 的握手关闭消息带有一个状态码和一个可选的关闭原因,它必须按照协议要求发送一个close控制帧,当对端收到关闭帧控制指令时,需要主动关系WebSocket连接
close()
方法代表再见握手。它终止连接,除非连接再次打开,否则不能交换任何数据。