长连接:一个连接上可以连续发送多个数据包,在连接期间,如果没有数据包发送,需要双方发链路检查包。
TCP/IP:TCP/IP 属于传输层,主要解决数据在网络中的传输问题,只管传输数据。但是那样对传输的数据没有一个规范的封装、解析等处理,使得传输的数据就很难识别,所以才有了应用层协议对数据的封装、解析等,如 HTTP 协议。
HTTP:HTTP 是应用层协议,封装解析传输的数据。 从 HTTP1.1 开始其实就默认开启了长连接,也就是请求 header 中看到的 Connection:Keep-alive。但是这个长连接只是说保持了(服务器可以告诉客户端保持时间 Keep-Alive:timeout=200;max=20;)这个 TCP 通道,直接 Request - Response,而不需要再创建一个连接通道,做到了一个性能优化。但是 HTTP 通讯本身还是 Request - Response。
socket:与 HTTP 不一样,socket 不是协议,它是在程序层面上对传输层协议(可以主要理解为 TCP/IP)的接口封装。 我们知道传输层的协议,是解决数据在网络中传输的,那么 socket 就是传输通道两端的接口。所以对于前端而言,socket 也可以简单的理解为对 TCP/IP 的抽象协议。
WebSocket: WebSocket 是包装成了一个应用层协议作为 socket, 从而能够让客户端和远程服务端通过 web 建立全双工通信。websocket 提供 ws 和 wss 两种 URL 方案。协议英文文档和中文翻译