一、什么是websocket?
WebSocket 是 HTML5 开始提供的一种基于TCP的全双工的通信协议,能够在浏览器和服务器之间建立双向连接,以此赋予浏览器实时通信能力,WebSocket服务器端和客户端都能主动向对方发送或接收数据,是服务器推送技术的一种。
二、为什么需要websocket?
在WebSocket出现之前,很多网站为了实现实时推送技术,通常采用的方案是轮询(Polling)和Comet技术,Comet又可细分为两种实现方式,一种是长轮询机制,一种称为流技术,这两种方式实际上是对轮询技术的改进,这些方案带来很明显的缺点,需要由浏览器对服务器发出HTTP request,大量消耗服务器带宽和资源。
而websocket的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,可以极大程度上节省资源和带宽。
在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。简单地说:客户端和服务器之间存在持久的连接,而且双方都可以随时开始发送数据,相比传统方式更加简捷高效。
三、Websocket的特点:
长连接性:连接一次建立,永久生效,在当前浏览器页面不关闭的情况下,连接会一直存在;
实时性:建立连接后,服务器不再被动接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器,这种全双工的通信模式可以很好的保证数据的实时更新。
高效快捷:由服务端直接向客户端发送请求,传输快捷高效
节省资源:互相沟通的Header非常小,只有 2 Bytes左右,能更好的节省服务器资源和带宽单,占用。
建立在 TCP 协议之上,服务器端的实现比较容易。
与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
数据格式比较轻量,性能开销小,通信高效。
可以发送文本,也可以发送二进制数据。
没有同源限制,客户端可以与任意服务器通信。
协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
四、websocket和其他方式的比较
传统数据更新方式
http协议中的"keep-alive connection",是指一次tcp连接中完成多个http请求,但对每个请求依然要单独发header;
轮询(Polling)技术,是指从客户端(一般就是浏览器)不断主动的向服务器http请求查询是否有新数据;
Comet技术,Comet技术又细分为两种实现方式:一种是长轮询机制,一种是流技术;
这几种方式具有很明显的缺点,就是需要由浏览器对服务器发出http request,大量消耗服务器的带宽和资源(就是除了真正的数据部分外,服务器和客户端还要大量交换http header,信息交换率很低)。
websocket技术的优点:
websocket是独立的,建立在tcp上的协议,和http协议唯一的关联就是使用http协议的101状态码进行协议切换,使用的tcp端口是80,可以用于绕过大多数防火墙的限制;
websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务器端直接向客户端推送数据而不需要客户端进行请求;
websocket的客户端和服务器之间可以创建持久性的连接,并允许数据进行双向传送;
websocket协议与http协议的关系:
websocket和http协议一样,都是基于tcp的,所以websocket也是一种可靠的协议,Web开发者调用的websocket的send()函数在browser(浏览器)的实现最终都是通过tcp的系统接口进行传输的。
websocket和http协议一样都是应用层的协议,websocket在建立握手连接时,数据是通过http协议传输的,但是在建立连接之后,真正的数据传输阶段是不需要http协议参与的。
五、在公司的主要应用场景
状态机:如在rancher中部署的应用状态、存储卷的状态、应用商店的状态、流水线的状态等;
列表数据更新:平台上所有的列表数据的增删改查等操作的实时更新;
yaml导入方式创建或更新的数据;
命令行:各种linux命令的实时下发与执行(命令交互更新推送);
日志更新:服务运行日志实时推送
六、主要测试方法
检查多帐户数据更新情况,如一个主帐户,一个子帐户,其中一个帐户上进行操作,查看另一帐户数据实时更新情况;
检查多浏览器数据更新情况,如同一帐户,用两个不同浏览器或同一浏览器不同模式来访问平台,在其中一浏览器上进行操作,查看另一浏览器的数据实时更新情况;
检查多入口操作数据更新情况,如管理后台入口和用户操作入口的数据实时更新情况;
检查多请求方式数据更新情况,如接口调用和界面操作,数据更新情况等。