|
| 1 | +# 1.WebSocket的基本概念 |
| 2 | +WebSocket是一种网络通信协议,很多高级功能都需要用到它。 |
| 3 | + |
| 4 | +# 2. 为什么需要WebSocket? |
| 5 | +初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? |
| 6 | +答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 |
| 7 | +举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。 |
| 8 | + |
| 9 | +这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。 |
| 10 | +轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开(HTTP长连接))。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。 |
| 11 | + |
| 12 | +**一句话: WebSocket是一种全双工的通信,相对于HTTP这种单工通信的方式,解决需要全双工通信的场景需求。** |
| 13 | + |
| 14 | +# 3.WebSocket的基础知识 |
| 15 | +WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 |
| 16 | +它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。websocket是一种全新的协议,协议名为"ws"。 |
| 17 | + |
| 18 | + |
| 19 | +其他特点包括: |
| 20 | +(1)建立在 TCP 协议之上,服务器端的实现比较容易。 |
| 21 | +(2)与 HTTP 协议有着良好的兼容性。**默认端口也是80和443,并且握手阶段采用 HTTP 协议**,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。 |
| 22 | +(3)数据格式比较轻量,性能开销小,通信高效。 |
| 23 | +(4)可以发送文本,也可以发送二进制数据。 |
| 24 | +(5)没有同源限制,客户端可以与任意服务器通信。 |
| 25 | +(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。 |
| 26 | + |
| 27 | +# 4.应用举例 |
| 28 | +XX司API协议对接(HTTP协议),主要目的是相机和平台建立websocket双向通信,平台侧能够使用LAPI协议主动获取相机侧的数据信息,相机侧也可以以LAPI的格式类型推送主动推送给平台; |
| 29 | +两者以websocket创建连接,后续使用LAPI协议进行数据获取和推送,对于内部产品的对接提供了便利;对于外部产品,使用提供的协议文档同样可以对接我司设备,免除了我们对接外部产品的工作量,如下图报文数据即websocket协议的交互。 |
| 30 | + |
| 31 | + |
| 32 | +* WS和HTTP的消息头与交互过程(以注册认证协议举例),设备向服务器发起注册,伪代码如下: |
| 33 | +  |
| 34 | +DeviceType:设备类型, |
| 35 | +DeviceCode: 设备序列号 |
| 36 | +**Algorithm:签名算法** |
| 37 | +**Nonce: 随机字符,每次发起随机不同** |
| 38 | +以上这些都是协议字段内容,**根据不同的协议均可更新修改**。 |
| 39 | +注册报文示例: |
| 40 | + |
| 41 | +响应报文示例: |
| 42 | + |
| 43 | + |
| 44 | +onnection:Upgrade必须设置为Upgrade,表示客户端希望连接升级 |
| 45 | +Upgrade:websocket必须设置为WebSocket,表示在取得服务器响应之后,使用HTTP升级将HTTP协议转换(升级)为WebSocket协议。 |
| 46 | +Sec-WebSocket-key:随机字符串,用于验证协议是否为WebSocket协议而非HTTP协议 |
| 47 | +Sec-WebSocket-Version:表示使用WebSocket的哪一个版本。 |
| 48 | +Sec-WebSocket-Accept:根据Sec-WebSocket-key和特殊字符串计算。验证协议是否为WebSocket协议(Accept是根据请求中的Key生成的,将其与一个固定字符串进行拼接后,使用SHA1算法得到hash后,再进行base64编码)。 |
| 49 | +Sec-WebSocket-Location:与Host字段对应,表示请求WebSocket协议的地址。 |
| 50 | +HTTP/1.1 101 Switching Protocols:101状态码表示升级协议,在返回101状态码后,HTTP协议完成工作,转换为WebSocket协议。此时就可以进行全双工双向通信了。 |
| 51 | +以上为注册标准格式,后面注册成功后,可以只发具体的Lapi协议。 |
| 52 | + |
| 53 | +#5. 个人认为核心知识点&HTTP或TCP等: |
| 54 | + 1. 连接建立过程 |
| 55 | + 2. 连接释放过程 |
| 56 | + 3. 连接生命周期 |
| 57 | + |
| 58 | +# 6. 参考链接 |
| 59 | +* How to Use WebSockets(http://cjihrig.com/blog/how-to-use-websockets/) |
| 60 | +* WebSockets - Send & Receive Messages(https://tutorialspoint.com/sebsockets/websockets_send_eceive_messages.htm) |
| 61 | +* Introducing WebSockets: Bringing Sockets to the Web(https://www.html5rocks.com/en/tutorials/websockets/basics/) |
| 62 | + |
| 63 | + |
| 64 | + |
| 65 | + |
| 66 | + |
| 67 | + |
| 68 | + |
0 commit comments