一、什么是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命令的实时下发与执行(命令交互更新推送); 日志更新:服务运行日志实时推送
六、主要测试方法 检查多帐户数据更新情况,如一个主帐户,一个子帐户,其中一个帐户上进行操作,查看另一帐户数据实时更新情况; 检查多浏览器数据更新情况,如同一帐户,用两个不同浏览器或同一浏览器不同模式来访问平台,在其中一浏览器上进行操作,查看另一浏览器的数据实时更新情况; 检查多入口操作数据更新情况,如管理后台入口和用户操作入口的数据实时更新情况; 检查多请求方式数据更新情况,如接口调用和界面操作,数据更新情况等。
