1, 简历 socket 连接, 启动服务端
2, 客户端在 html 里面写数据建立连接
- <script type="text/javascript">
- var socket = new webSocket("ws://127.0.0.1:8002/xxoo");
- ...
- </script>
3, 双方建立握手
服务端拿到, 客户端传过来的数据
拿到头部传过来的 Sec-WebSocket-Key
拿 magic_string 和 Sec-WebSocket-Key 进行 hmac1 加密, 再进行 base64 加密
把加密结果返回给客户端
4, 如果他加密的结果返回给客户端
如果和客户端一样, 则继续连接,
如果不一样, 则客户端断开与服务器的连接
5, 客户端和服务端传输数据时, 需要进行封包和解包的过程, 客户端的 javascript 已经封装封包和解包的过程,
但是 socket 服务端需要手动实现.
6, 解包的过程分为 3 步: PS:payload 像是一个标识, 告诉程序到我这里就执行完毕, 后面就是其他东西, 例如 masking key
和数据的内容
1, 如果 payload length 的长度小于 125, 后面的数据
2, 如果 payload length 长度等于 126, 则后面 16 位就是 masking key, 在 masking key 后面就是数据
3, 如果 payload length 长度等于 127, 则后面的 64 位, 就是 masking key, 在 masking key 后面就是数据
7. 服务器发送数据给客户端时, 也需要封包.
来源: http://www.bubuko.com/infodetail-2520949.html