解释WebSocket为什么可以实现持久连接,还是先介绍一些什么是WebSocket,以及它产生的原因是什么。
WebSocket是一个协议。
协议就是王八的屁股——规定,你可以不遵守,但是别人都遵守你不遵守,你就跟别人玩不到一块去。
WebSocket协议在2008年诞生,2011年成为了国际标准,现在绝大部分浏览器都已经支持了。
其实原因是为了弥补HTTP协议的不足,因为HTTP协议只能由客户端发起请求,并且一个Request要对应一个Response(长链接也是如此)。
举个例子:
我之前做过一个小项目,只有一个页面,展示的是各个分公司当天的业绩,就是挣了多少钱。后台服务是Java,数据库是Mysql,有一张汇总表,内容大概是北京-100万,上海-80万这样的。
流程很简单,HTML页面发起请求到Java,Java访问数据库查询数据,再返回给HTML展示。但是Mysql中的汇总表的数据,是不定期更新的,可能10分钟,可能20分钟。
最简单的做法:HTML中用JS设置一个定时轮询(Polling),每隔几秒去发起一次请求,获取最新的数据,如果数据没有变化,页面也保持变化;缺点很明显,前端发起的很多请求都是无效的(因为数据没有变化)。
而WebSocket,是要在客户端和服务器之间,建立一个通道,建立一个【真的长链接】。
WebSocket是要借助于HTTP,完成一部分工作。我在找到一个WebSocket在线测试的网站,打开之后查看请求和响应(具体网站连接也看下面图片中的信息)。
可以看出来协议里面多了两行:
Upgrade: websocket
Connection: Upgrade
这个就是关键内容了,通过请求告诉服务器:看清楚咯,请求要用WebSocket协议。
服务器会回答:好的,那我就切换到WebSocket协议啦。
到了这时候,HTTP完成它所有工作,客户端和服务器已经建立好了一个通道,下面就按照WebSocket协议进行了,服务端也就可以主动推送信息给客户端(双向),并且这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接,故此WebSocket也就实现了持久连接。
联系客服