• 1
  • 0
分享

1. WebSocket协议详解

1.1 WebSocket的由来

在《接口测试开发之:一图搞懂HTTP协议与HTTPS协议的传输过程》这篇博文,小鱼分析了一下HTTP和HTTP的协议传输过程,

但是呢,没有详细的介绍WebSocket,

所以,这篇就专门来介绍WebSocket的原理及并发实战。

在介绍WebSocket的由来之前,我们先看一个例子,

客户端:你好,MM,有没有新消息(request)
服务端:没有(response)
客户端:你好,MM,有没有新消息(request)
服务端:没有(response)
客户端:你好,MM,有没有新消息(request)
服务端:没有,没有,怎么还一直问呢(response)
客户端:亲,有没有新消息(request)
服务端:有了有了,这就告诉你(response)
客户端:亲,有没有新消息(request)
服务端:又来了…没有没有(response) -loop

那么上面这个例子,就是Ajax轮询原理。

我们可以看到,Ajax轮询需要服务器有很快的处理速度和资源。而long poll需要很高的并发,也就是说同时接待客户的能力。

为了能解决这种过度消耗资源的问题,WebSocket协议就应运而生了。


WebSocket与Ajax(或XHR)的区别:

        ① WebSocket API 在服务器和客户算可以给定的时间范围内任意时刻,互相推送信息

        ② WebSocket并不限于以Ajax(或XHR)方式信息,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;

        ③ XHR受域的限制,而WebSocket允许跨域通信。

1.2 WebSocket的原理

同样,我们还是以举例子来看WebSocket实现原理,

场景如下

客户端:你好,MM,我要建立WebSocket协议,需要的服务:chat,WebSocket;协议版本:17(HTTP Request)
服务端:OK,确认,已升级为WebSocket协议(HTTP Protocols Switched)
客户端:亲,麻烦有信息的时候,推送给我哦
服务端:OK,有消息就告诉你
服务端:消息1,巴拉巴拉一大堆
服务端:消息2,巴拉巴拉一大堆
服务端:消息3,巴拉巴拉一大堆
服务端:…有消息,一直巴拉巴拉

从上面的例子,可以看出,只要经过一次HTTP请求,就可以做到源源不断的信息传递。

这样协议也同时解决了langloop以及Ajax轮询的同步有延迟而非常消耗资源的问题。

我们所有的程序是要经过两层代理的,即HTTP协议在Nginx等服务器的解析下,然后在传送给相应的Handler来处理。

简单的说,就是:我们有一个非常快速的接线员(Nginx),它负责把问题转交给相应的客服(Handler)。

接线员速度起来了,但每次都卡在客服这里(Handler),导致客服每次都要求给5星好评,但是这速度太慢,只能给1星,怎么办呢?

WebSocket就解决了这个难题,建立后,可以直接跟接线员建立持久连接,这必须5星好评。

WebSocket只需要一次HTTP握手,就可以持久通话

2. WebSocket的请求

2.1 WebSocket模块

都说第三方库是万能的,这话没毛病。

由于request模块是基于HTTP协议的,所以如果要发送WebSocket请求,就需要安装第三方的WebSocket模块。

安装方式,必须是pip安装

pip install websocket

pip install websocket-client

2.2 WebSocket请求与响应

WebSocket语法也相当简单,发送一个WebSocket的请求连接,通道连接成功之后,可以发送消息,也可以接收消息,

代码如下:

varable = websocket.create_connection(url)

建立连接,此时的url是以ws开头

varable.send(发送内容)

发送带消息的内容,可以是字符串,也可以是列表字典。

具体需要看服务器接收什么数据

varable.recv()

接收服务器消息。

这个区别于HTTP的response的地方于:接收消息是没有超时机制的。

也就是说,一旦建立连接通道后,就会一直处理等待状态,知道接收到数据才会关闭recv()方法。

所以WebSocket相对HTTP还是简单很多,建立连接,然后发送消息和接收消息。

下一篇,就是代码实例,点击即可进入《接口并发测试之:WebSocket从原理到代码实战(二)》

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • Selenium 是什么?Selenium是一个用于Web应用程序测试的工具,可以模拟真正的用户操作,支持多种浏览器,如Firefox,Safari,Google Chrome,Opera等。Selenium 模拟的就是一个真实的用户的操作行为,我们完全不用担心 cookie 追踪和隐藏字段的干扰。一、核心代码talking is cheap,话不多说,上代码!from selenium import webdriver import time # 注意这里使用了我本机的谷歌浏览器驱动 browser = webdriver...
            0 0 1474
            分享
          • 一、遇到的问题在做移动端的UI自动化测试时,经常会遇到上图所示的搜索框,这里有个麻烦就是搜索框没有“搜索”按钮,UI自动化测试时不能确认搜索。要解决这个问题,我们可以通过 driver.press_keycode('66') 方法模拟键盘回车,具体的使用方法请参考:http://testingpai.com/article/1595507207594/comment/1595559375540但是这种方法只能适用于Android环境,iOS环境不能使用。由于我是在Webview环境做UI自动化测试,无论是Android环境,iOS环境都可以使用js方法解决疑难杂症,操作时只需要...
            0 0 764
            分享
          • 前言还记得前段时间情人节,各种产品活动秒杀。结果有对象的辣条自然少不了被对象一番折磨 (注意:不是new出来的哈,也不是橡胶的,实实在在的女朋友) 于是乎彻底激发了我的求生欲,在这种关头我是必须发挥出自己的才能了,这才有了这篇毫秒级秒杀的精品出来,话不多说直接进入主题目录项目环境某宝抢购流程分析程序实现思路代码实践与梳理项目环境操作系统:Windows 10 开发环境:python3.7IDE:Pycharm自动化模块:Selenium安装命令:pip install selenium浏览器版本:Google Chrome 99.0.4844.51浏览器驱动版本:ChromeDriv...
            11 12 1159
            分享
          • 摘要:在实际项目中,抛开产品需求的质量不说,但就研发质量保证而言,测试人员在测试阶段发现大量的实现类bug,每天拉着开发人员修bug;要么在临近上线的时候,发现了一个重大问题,导致修复验证时间不够,但又只能“硬着头皮”上线。解决这些问题的方法或许多种多样,但这里来聊聊如何使用研发质量保证前置来尽可能避开这些问题。关键词:研发质量,质量保证前置,尽早暴露问题,上线风险背景在实际项目中,抛开产品需求的质量不说,但在研发质量保证上面,测试人员往往需要时不时的面对不少头痛的情况:开发团队来了一个新人,本来需求量不大,但测试人员在测试时发现连主流程都跑不通,无法走下去;这次有一个从零起步的大项目,涉及多...
            0 1 2676
            分享
          • 并发用户严格意义的并发:即所有的用户在同一时刻做同一件事情或者操作,这种操作一般指做同一类型的业务 。广义范围的并发:这种并发与前一种并发的区别是尽管多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。 并发用户数并发用户数是指同时进行请求的客户数量并发用户数用于模拟用户的真实负载情况(并发情况是对系统最大的考验)并发数≠同时使用系统的用户数(VU)虚拟用户数(VU)同时使用系统的用户数TPS(Transaction per Second):系统每秒处理事务数,单位是笔/秒。(事务:整个业务交易处理的过程),若能获取到“高峰时段交易量(笔/小时)...
            14 14 1386
            分享
      • 51testing软件测试圈微信