websocket

理论:

它基于TCP传输协议,并复用HTTP的握手通道,属于应用层协议

Socket 是传输控制层协议,WebSocket 是应用层协议。

  1. 建立连接
  2. 交换数据
  3. 数据帧格式
  4. 维持连接

 

1.建立连接

首先,客户端发起协议升级请求。可以看到,采用的是标准的HTTP报文格式,且只支持GET方法。[将数据放到socket里发送]

GET / HTTP/1.1
Host: localhost:8080
Origin: http://127.0.0.1:3000
Connection: Upgrade       # 表示要升级协议
Upgrade: websocket        # 表示要升级到websocket协议。
Sec-WebSocket-Version: 13    # 表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。
Sec-WebSocket-Key: w4v7O6xFTi36lq3RNcgctw==   # 与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=    #Sec-WebSocket-Accept由Sec-WebSocket-Key计算得出: toBase64( sha1( Sec-WebSocket-Key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 )  )

2.交换数据

一旦WebSocket客户端、服务端建立连接后,后续的操作都是基于数据帧的传递。

WebSocket根据opcode来区分操作的类型。比如0x8表示断开连接,0x0-0x2表示数据交互。

3.数据帧格式

4.维持连接

发送心跳,ping  pong

 

具体使用:

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。

以下 API 用于创建 WebSocket 对象。

websocket

 

 websocket

 

websocket

上一篇:Mysql常用sql语句(六)- limit 限制查询结果的条数


下一篇:.NETCore微服务探寻(二) - 认证与授权