背景介绍
由于近期压测平台的开发,期中设计到的一个功能点就是要实时监控任务的运行状态一旦改变要及时在页面更新状态,首先压测用例的运行状态是保存在服务端那么客户端如何做到实时监控呢?初步想来无非两种式:
- 服务端主动推数据
- 客户端每隔一段时间主动拉数据
服务端主动推数据
这种方式主要是给予HTTP的长连接的‘服务器推’技术,能使服务器主动异步的方式向客户端推数据,我研究过以下的实现方式
- ajax的长轮询(long-polling)方式
- 服务器端会阻塞请求直到有数据传递或超时才返回。
- 客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接
- 当客户端处理接收的数据、重新建立连接时,服务器端可能有新的数据到达;这些信息会被服务器端保存直到客户端重新建立连接,客户端会一次把当前服务器端所有的信息取回。
- 实现模型如图
代码实现
@app.route("/getRunStatus",methods = [ "POST", "GET" ] )
def get_run_status():
try:
#服务端每隔3s返回一次数据,此时线程一直是挂起状态直到有结果数据返回给客户端
while 1:
rid =request.form.get( "id", "")
time.sleep(3)
#获取客户端需要返回的信息
results = RelayPressCaseSql().select_press_cases_by_sid(rid)
if results.run_status == 2 or results.run_status==3 or results.run_status&