ajax轮询在压测平台中的应用

新书

速递

吴老的java版《selenium webdriver 实战宝典》和python版《selenium Webdriver 3.0 自动化测试框架实战指南》出版了,代码拿来就能用。

文 | a11en_03

背景介绍

由于近期压测平台的开发,期中设计到的一个功能点就是要实时监控任务的运行状态一旦改变要及时在页面更新状态,首先压测用例的运行状态是保存在服务端那么客户端如何做到实时监控呢?初步想来无非两种式:

1. 服务端主动推数据

2. 客户端每隔一段时间主动拉数据

服务端主动推数据

这种方式主要是给予HTTP的长连接的‘服务器推’技术,能使服务器主动异步的方式向客户端推数据,我研究过以下的实现方式。

- ajax的长轮询(long-polling)方式

1. 服务器端会阻塞请求直到有数据传递或超时才返回。

2. 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接

3. 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。

4. 实现模型如图

代码实现

前端代码

遇到的问题

此种方式我在项目中遇到的弊端就是在同一个Html页面中发起一个长轮询请求后服务端会挂起当前线程,此时客户端一直处于等待响应阶段,由于html刷新机制是单线程,所以就会影响同一个html页面中的其他请求都会被挂起如图所示

客户端定时拉数据

所谓的Ajax轮询,其实就是定时的通过Ajax查询服务端,客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。这种技术方式实现起来非常简单,但是这种方式会有非常严重的问题,就是需要不断的向服务器发送消息询问,这种方式会对服务器造成极大的性能浪费。

还有一个类似的轮询是使用JSONP跨域请求的方式轮询,在实现起来有差别,但基本原理都是相同的,都是客户端不断的向服务器发起请求。

优点 实现简单。

缺点 这是通过模拟服务器发起的通信,不是实时通信,不顾及应用的状态改变而盲目检查更新,导致服务器资源的浪费,且会加重网络负载,拖累服务器。

但是——简单看似没有什么优点的东西,存在即是合理,就像TCP 和 UDP俩哥俩一样你能说UDP是没用的嘛?答案是否定的,所以基于我项目情况虑,有以下几点,我选择这种方式:

压测平台压没有并发用户的场景

数据更新时延没有严格要求-,10s的时延我都可以接受,嘿嘿嘿

完美解决了我同一个html页面处理其他请求的需求

每隔10几秒让服务器处理个任务简直就可以忽略不计因为我的施压服务和被压服务都是和策略服务分离的~欧耶~

6. 实现模型

代码实现

前端代码

总 结

其实还有很多其他的实现方式,下面只做一个方向总结,具体问题还是要具体分析,具体技术选择,如下:

- websocket方式(WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议)

- Comet的方式

优点: 实时性好(消息延时小);性能好(能支持大量用户)

缺点: 长期占用连接,丧失了无状态高并发的特点。

- 基于 Iframe 及 htmlfile 的流(streaming)方式()

安装喜马拉雅app,搜索“光荣之路”可以收听吴老和他的朋友们分享的35小时测试知识语音

本文来自企鹅号 - 光荣之路媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jackson0714

架构之旅1 - 扣减库存

生活中,我们总是用各种电商app抢购商品,但是库存数是很少的,特别是秒杀场景,商品可能就一件,那如何保证不会出现超卖的情况呢?

21950
来自专栏散尽浮华

linux负载均衡总结性说明(四层负载/七层负载)

在常规运维工作中,经常会运用到负载均衡服务。负载均衡分为四层负载和七层负载,那么这两者之间有什么不同? 废话不多说,详解如下: 一,什么是负载均衡 1)负载均衡...

1.1K80
来自专栏数据和云

故障恢复:从未知错误ORA-600 [3712]以猜测推理达成恢复

李真旭 Oracle ACE,云和恩墨技术专家 个人博客:www.killdb.com 在Oracle数据库的日常维护中,我们可能经常会遇到一些从未见过的错误,...

31960
来自专栏FreeBuf

我们要在任何可能的地方测试XSS漏洞

在这篇文章中,我准备跟大家讨论几种不同的场景,在这些场景中,不同的服务都会收集各种各样的数据,但它们又无法正确地去处理这些数据。在某些情况下,数据采用的是安全格...

42750
来自专栏Rainbond开源「容器云平台」

【技能】学会了它,你就可以轻松泡妹子了!

17040
来自专栏IT笔记

SVN自动化部署全流程之架构之美

公司一直没有一个完善的部署流程,基本都是通过上线打包以后SSH手动拖拽部署项目。 当然网上也有现成的持续集成工具,比如jenkins。Jenkins是一个开源软...

44170
来自专栏漏斗社区

工具|NESSUS的高级扫描方法

开篇之时,斗哥就想问你一句,上周的NESSUS基础扫描任务的创建方法6不6 ?不知各位小伙伴们装进心窝了没?!这周斗哥经过深思熟虑,最终慎重决定将NESSUS的...

1.3K60
来自专栏耕耘实录

Linux运维工程师成长路线及应实现的目标

作为一名运维工程师,需要学习的东西非常多,在学习的过程中也没有任何捷径可言,必须一步一个脚印地学习、积累才能把个人技能提升到相应的高度。根据目前流行的发行版及国...

13620
来自专栏Java架构师学习

你想了解的分布式--从ACID到CAP/BASE

本文先介绍传统关系数据库中事务的ACID特性,再介绍分布式系统中的经典理论——CAP定理和BASE理论。 事务 事务的定义: 事务(Transaction)是由...

31580
来自专栏恰童鞋骚年

《大型网站技术架构》读书笔记之五:万无一失之网站的高可用架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

15840

扫码关注云+社区

领取腾讯云代金券