WebSocket是html5的产物,跟socket相似,但是前期通讯是基于http,而http又是基于TCP
先说下TCP的三次握手
翻译成人话就是这样
1 | 客户端:老哥你在吗 |
TCP握手建立连接后,就开始基于HTTP协议传输数据,在http 1.0的时候,每个请求都需要一个连接,请求完成连接就断开,然后重新握手
到了http 1.1则支持一次连接多个请求,像这样
。。。握手之后1
2
3
4
5
6客户端:吧啦吧啦吧啦吧啦
服务端:吧拉收到
客户端:吧唧吧唧吧唧吧唧
客户端:吧嗒吧嗒吧嗒吧嗒
服务端:吧唧收到
服务端:吧嗒收到
请求不一定是依次发送的,可以是重叠,而且每个请求并无需等服务端返回,而且几次请求期间,连接是一直存在的,即使中间不是连续的,客户端也会定时发“keep-alive”的指令让服务端保持连接,而服务端可以通过配置http服务器来设置超时时间,如Apache、Tomcat之类
断开连接则需要4次握手,多出的一次是因为服务端要通知客户端请求完成
如下图
1 | 客户端:老哥我要断开连接啦 |
Socket是基于传输层和应用层之间的一个抽象层,说白就是对TCP/IP协议的封装,是一个API接口,而不是协议
Socket也叫套接字,建立Socket需要一对套接字,分别位于客户端和服务端
首先服务端打开监听服务,客户端对服务器提出请求,服务端确认请求,此时连接就建立起来了
Socket一般采用TCP协议,也可以指定UDP协议,而HTTP是基于TCP协议应用层协议,在传输层之上的