WebSocket测试方法论

100 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

WebSocket是HTML5提供的一种能在单个TCP连接上进行全双工通信的协议。前面介 绍过,HTTP是一种无状态、无连接、单向的应用层协议。

HTTP采用了请求/响应模型:通信请求只能由客户端发起,服务各器负责对请求做出应答 处理。但这会出现一个很严重的问题--HTTP永远无法从服务器发起会话。

HTML5与WebSocket的关系

WebSocket API是HTML5标准的一部分,但这并不代表WebSocket一定要用在HTML中,或者只能在基于浏览器的应用程序中 使用。

实际上, 许多语言、框架和服务器都提供了WebSocket支持,例如:

基于C的libwebsocket.org

基于Node.js的Socket.io

基于Python的ws4py

基于C++的WebSocket++

Apache对WebSocket的支持:Apache Module mod_proxy_wstunnel

Nginx对WebSockets的支持:NGINX as a WebSockets Proxy、NGINX Announces Support for WebSocket Protocol、 WebSocket proxying

lighttpd对WebSocket的支持:mod_websocket

既然是基于浏览器端的web技术,那么它的通信肯定少不了http,websocket本身星然也是一种新的应用层协议,但是它也不能够脱离http 而单独存在。具体来讲,我们在客户端构建一个websocket实例,并且为它绑定一个需要连接到的服务器地址,当客户端连接服务端的时 候,会向服务端发送一个类似下面的http报文:

image.png

Websocket是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以 ws://或wss://开头。它是一个有状态协议,这意味着客户端和服务器之间的连接将保持活动状 态,直到被任何一方(客户端或服务器)终止。在通过客户端和服务器中的任何一方关闭连接之 后,连接将从两端终止。

最常见的数字码:

1000---默认,正常关闭(如果没有指明code时使用它),

1006---没有办法手动设定这个数字码,表示连接丢失(没有close fraame)

还有其他数字码,例如:

1001---方正在离开,例如服务器正在关闭,或者浏览器离开了该页面,

1009---消息太大,无法处理,

1011---服务器上发生意外错误,

连接状态

要获取连接状态,可以通过带有值的socket.readyState属性

0--"CONNECTING":连接还未建立,

1--"OPEN":通信中,

2--"CLOSING":连接关闭中,

3--"CLOSED":连接已关闭。

总结

WebSocket是一种在浏览器和服务器之间建立持久连接的的现代方式。

WebSocket没有跨源限制。

浏览器对WebSocket支持很好。

可以发送/接收字符串和二进制数据。