WebSocket和Socket

280 阅读2分钟

Socket

网络中的Socket是一个抽象的接口,可以理解为网络中连接的两端。通常被叫做套接字接口,其意义在对传输层进行封装屏蔽了传输层的复杂性。它并不是一个协议,是为了大家更方便的使用传输层协议产生的一个抽象层。大部分的主流编程语言都提供socket函数。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是应用层与传输层的接口,是支持TCP网络通信的基本通信单元,完成了不同进程间的通信。在互联网中,通信模式是客户端(client)与服务器(server)的端点对端点的通信模式。标识每个端点IP地址和端口号称为套接字。Socket={IP: PORT}。标识源IP地址,源port,目的IP地址,目的port,协议统称为套接字对。

Socket通信流程

WebSocket

WebSocket是HTML5新增的协议,它的目的是在浏览器和服务器之间建立一个不受限的双向通信的通道,例如,如武器可以在任何时刻发送消息给浏览器。 WebSocket请求协议是一个标准的HTTP请求,格式如下:

GET ws://localhost:8080/ws HTTP/1.1
Host: localhost
Upgrade: websocket
Connection: http://localhost:8080
Sec-WebSocket-Key: client-random-string
Sec-WebSocket-Version: 13

该请求和普通的HTTP请求有几点不同:

  • Get请求的地址不是类似/path/,而是以ws: //开头的地址
  • 请求头UpgradeL websocketConnection: Upgrade表示这个连接将要被转换为WebSocket连接
  • Sec-WebSocket-Key是用于标识这个连接,并非用于加密数据
  • Sec-WebSocket-Version制定了WebSocket的协议版本 随后,服务器如果接受该请求,就会返回如下响应:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: server-random-string

该响应代码101表示本次连接的HTTP协议即将被更改,更改后的协议就是Upgrade: websocket指定的WebSocket协议。

总结

Socket是长链接协议,跟UDP一样只是传输介质不同

  • 什么时候会自动断开?
    客户端主动发信号断开,服务端可以主动断开
    
  • 为什么长时间不通信会自动断开?
    服务端为了节省资源都会设置心跳检测,超时未应答,服务端就自动断开