简介
本文介绍Http,Socket,Websocket的区别。
Socket是抽象层,在应用层与运输层中间。所以本文重点对比HTTP与Websocket。
Http与Websocket的对比
相同点
项 | Http | Websocket |
相同点 | ||
所在层面 | 应用层(调用Socket,基于TCP) | 应用层(模拟Socket,基于TCP) |
不同点
项 | Http | Websocket |
连接类型 | 短连接(浏览器控制,页面无法控制)。 | 长连接。 连接时间可编程,可永久连接(除非断网)。 |
通信方式 | 客服端发起请求,服务端才响应。服务端不能主动联系客户端,只能由客户端发起。(单向) | 只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 不用再次发起网络请求,它允许服务端主动向客户端推送数据。 |
端口 | 默认为8080 | 默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。 |
联系
WebSocket通过HTTP协议建立握手建立之后,使用TCP协议传输。
HTTP
短连接
在HTTP1.0中,客户端发送请求,服务器接收请求,双方建立连接,服务器响应资源,请求结束。
长连接
持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
HTTP1.1开始,默认采用持久连接,使用了一种叫做keepalive connections 的机制。在传输数据后仍然保持连接,当客户端再次获取数据时,直接使用刚刚空闲下来的连接,而无需再次握手,低线路负载,提高传输速度。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
长连接优势:减少了连接请求,降低TCP阻塞,减少了延迟,实时性较好。
长连接劣势:可能会影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。
Websocket
WebSocket连接的过程如下
- 首先,客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;
- 然后,服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;
- 最后,客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。
请先
!