• 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从原理到代码实战(二)》

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

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 兼容性测试方案兼容性问题屏幕分辨率兼容性问题;软件(iOS和Android系统版本及不同厂家的定制ROM)兼容性问题;硬件(不同的CPU、内存大小等等)兼容性问题;网络(2G/3G/4G/WIFI)兼容性。公司内部兼容性测试1、屏幕分辨率、软件版本和硬件兼容性通过客户端嵌入统计SDK,统计出当前已有用户的分辨率、软件版本和手机使用排行;购买相应排名前十位的设备,这三个属性可相互交叉覆盖到即可注:解决的是基本和必须的兼容性问题。2、网络兼容性通过购买不同的手机卡支持相应的2G/3G/4G,和使用公司现有的WIFI网络解决网络兼容性问题。最终需要在测试用例中体现。3、辅助工具monkey随机事件测...
            0 0 1190
            分享
          •   1.背景说明  对于使用关系型数据库的系统而言,在系统投产上线后,及时发现程序运行中的慢SQL语句,能有效降低系统运行风险;对于分布式应用系统来说,在系统日常运行中,为避免因数据库长事务导致主备切换风险,实现对数据库长事务的监控,也是必不可少的。本文以MySQL数据库为例,概述通过数据库自带功能特性performance_schema实现对慢SQL和长事务的监控方法。  2.performance_schema特性介绍  (1)performance_schema 是运行在较低级别的用于监控MySQL Server运行过程中的资源消耗、资源等待等情况的一个功能特性,可以高效便捷实...
            0 0 430
            分享
          •   根据分析公司Similarweb的数据,去年11月发布后就火爆全球的人工智能聊天机器人ChatGPT,在今年6月出现了首次网站流量和独立用户访问量的月度下滑。  数据显示,ChatGPT今年6月的全球桌面和移动设备流量较5月下降9.7%,其网站的独立用户访问量下降5.78%。6月的访客花在该网站上的时间也减少了8.5%。  Similarweb高级洞察经理DavidCarr表示,流量变化表示这款聊天机器人带给人们的新奇感渐渐消失。加拿大皇家银行资本市场分析师RishiJaluria解释道,这些数据表明,人们对生成式人工智能的实时信息生成能力的需求有所增加。  ChatGPT的开发者Open...
            0 0 789
            分享
          • 新浪科技讯北京时间9月22日早间消息,据报道,美国宇航局(NASA)准备利用“太空发射系统”全新大型火箭(SLS),完成登月的任务。本周三,NASA进行了一次SLS的燃料箱加注液氢试验,虽然遭遇了两次泄露和一些技术故障,试验总算是完成。NASA“阿尔特弥斯一号”任务的发射总监汤普森(CharlieBlackwell-Thompson)对媒体表示,当天燃料箱液氢加注试验的所有目标,最终都已经完成。不过,汤普森并未对媒体确认宇航局阿尔特弥斯一号任务的最终发射日期,这项任务标志着SLS的首次对外亮相。据估计,NASA最早有可能发射的时间是9月27日。汤普森表示,她不想在获得准确数据之前发表一些观点,...
            0 0 1024
            分享
          • 1、HTTP接口传递数据最常用的方式:Get方式是从服务器上获取数据;在做数据查询时,建议用Get方式;如:商品信息接口、搜索接口、博客访客接口等。Post方式是向服务器传送数据;在做数据添加、修改或删除时,建议用Post方式;如:微博图片上传图片接口、登录注册接口等。post和get的区别:1)GET请求只是简单的获取数据,不修改请求的资源;而POST请求会修改请求的资源。导致的后果是相同的GET请求能获取相同的资源,而POST不能保证获取相同的资源。2)GET请求的参数在HTTP中是通过url传递的,POST请求的数据是通过requestbody体传递的3)GET请求资源再服务器上能够缓存...
            0 0 4890
            分享
      • 51testing软件测试圈微信