CN113765740A - 一种对Dio网络请求进行监控的方法和装置 - Google Patents

一种对Dio网络请求进行监控的方法和装置 Download PDF

Info

Publication number
CN113765740A
CN113765740A CN202110887717.2A CN202110887717A CN113765740A CN 113765740 A CN113765740 A CN 113765740A CN 202110887717 A CN202110887717 A CN 202110887717A CN 113765740 A CN113765740 A CN 113765740A
Authority
CN
China
Prior art keywords
implementation
network request
aspectd
target network
layer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202110887717.2A
Other languages
English (en)
Other versions
CN113765740B (zh
Inventor
郑秀群
梁少泽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wangsu Science and Technology Co Ltd
Original Assignee
Wangsu Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wangsu Science and Technology Co Ltd filed Critical Wangsu Science and Technology Co Ltd
Priority to CN202110887717.2A priority Critical patent/CN113765740B/zh
Publication of CN113765740A publication Critical patent/CN113765740A/zh
Priority to PCT/CN2022/072070 priority patent/WO2023010814A1/zh
Application granted granted Critical
Publication of CN113765740B publication Critical patent/CN113765740B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/08Monitoring or testing based on specific metrics, e.g. QoS, energy consumption or environmental parameters
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L43/00Arrangements for monitoring or testing data switching networks
    • H04L43/10Active monitoring, e.g. heartbeat, ping or trace-route
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/34Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters 

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Environmental & Geological Engineering (AREA)
  • Health & Medical Sciences (AREA)
  • Cardiology (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer And Data Communications (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种对D i o网络请求进行监控的方法,所述方法包括:在F l utter应用层中嵌入AspectD实现层,以使得当F l utter应用层基于第一实现接口发起目标网络请求时,AspectD实现层生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取d i o实例;当F l utter应用层调用所述d i o实例,并基于第二实现接口向外发送所述目标网络请求时,AspectD实现层生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳。本申请提供的技术方案,可以在不修改应用本身任何代码的情况下,实现对F l utter D i o网络请求的监控。

Description

一种对Dio网络请求进行监控的方法和装置
技术领域
本发明涉及互联网技术领域,特别涉及一种对Dio网络请求进行监控的方法和装置。
背景技术
Flutter是一款移动UI框架,利用Flutter框架可以快速在IOS和Android系统上构建高质量的原生用户界面。在Flutter应用开发过程中,势必需要用到网络请求。Dio是Flutter插件库中的一款网络请求插件,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等操作,因此开发者经常使用Dio网络请求插件对网络请求进行封装。
当一个产品开发完毕交付到用户手中后,开发者为了更好的了解用户的使用情况、数据的加载情况,通常需要对网络请求的发送时长、数据的加载时间等网络情况进行监控。然而,目前并不存在对Flutter Dio网络请求进行监控的方案。
鉴于此,有必要提供一种对Dio网络请求进行监控的方法和装置以解决上述不足。
发明内容
本申请的目的在于提供一种对Dio网络请求进行监控的方法和装置,可以在不修改应用本身任何代码的情况下,实现对Flutter Dio网络请求的监控。
为实现上述目的,本申请一方面提供一种对Dio网络请求进行监控的方法,所述方法应用于客户端中,所述客户端构建有Flutter应用层和AspectD实现层,所述方法包括:当所述Flutter应用层基于第一实现接口发起目标网络请求时,所述AspectD实现层生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例;当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,所述AspectD实现层生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳,以监控所述目标网络请求的发送时长和响应时长。
为实现上述目的,本申请另一方面还提供一种对Dio网络请求进行监控的装置,所述装置应用于客户端中,所述客户端构建有Flutter应用层,所述装置包括:AspectD嵌入模块,用于在所述Flutter应用层中嵌入AspectD实现层;AspectD实现层模块,用于当所述Flutter应用层基于第一实现接口发起目标网络请求时,生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例,以及当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳;网络请求监控模块,用于基于所述发送时间戳和所述响应时间戳,监控所述目标网络请求的发送时长和响应时长。
为实现上述目的,本申请另一方面还提供一种对Dio网络请求进行监控的装置,所述装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,实现上述对Dio网络请求进行监控的方法。
由此可见,本申请提供的技术方案,首先在Flutter框架中引入AspectD实现层,然后利用AspectD实现层对Flutter应用层进行挂钩处理,以获取dio实例,这样当Flutter应用层调用dio实例对网络请求进行封装时,AspectD实现层便可以对网络请求的发送时长、数据的加载时间等网络情况进行监控,并且当Flutter应用层接收到对应的响应信息时,AspectD实现层同样可以对网络请求的响应时长进行监控。如此,通过利用AspectD实现层对Dio网络请求底层库中的特定方法和特定位置进行无痕埋点,便可以在不对Flutter应用代码进行任何修改的情况下,获取到Dio网络请求的发送时长、响应时长等数据指标。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施方式中客户端软件架构示意图;
图2本申请实施方式中对Dio网络请求进行监控的方法的流程图;
图3是本申请实施方式中对Dio网络请求进行监控的装置的功能模块示意图;
图4是本申请实施方式中对Dio网络请求进行监控的装置的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
Flutter是一款移动UI框架,其使用Dart语言开发,Dart语言可以方便地被编译成不同平台的本地代码,因此利用Flutter框架可以快速在IOS和Android系统上构建高质量的原生用户界面,这就使得开发者越来越多的使用Flutter框架来重构或新建其产品。
在Flutter应用开发过程中,势必需要用到网络请求,而Dio是Flutter插件库中的一款网络请求插件,Dio支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时、自定义适配器等操作,因此在Flutter框架下开发者经常使用Dio网络请求插件对网络请求进行封装。
当一个产品开发完毕交付到用户手中后,开发者为了更好的了解用户的使用情况、数据的加载情况,通常需要对网络请求的发送时长、数据的加载时间等网络情况进行监控。然而,目前并不存在对Flutter Dio网络请求进行监控的方案,这就使得开发者无法对Flutter应用进行针对性的优化。
因此,如何对Flutter Dio网络请求进行监控,以获取Dio网络请求的发送时长、响应时长等数据指标,便成为本领域亟待解决的问题。
本申请提供的技术方案可以解决上述不足。
为便于理解本申请中涉及到的AspectD内容,下面对其进行简要介绍。
AspectD是针对Flutter的AOP(Aspect Oriented Programming,面向切面编程)开源库,用于解决AOP for Flutter的问题,可以在不修改Flutter源代码的情况下动态统一地添加功能。
Flutter在编译时,首先由编译前端将dart代码转换为中间文件app.dill,然后在debug模式下,将app.dill转换为kernel_blob.bin,在release模式下,app.dill被转换为framework。AspectD就是对app.dill进行修改,从而实现在Flutter中应用AOP。具体的,AspectD通过编译aop.dart生成中间产物,使得dill文件中既包含原始项目代码,也包含AOP代码,然后通过Dill变换对dill文件进行操作,提取出哪些库/类/方法需要添加怎样的AOP代码,从而在不修改Flutter源代码的情况下,对Flutter应用层添加相应的功能。
请一并参阅图1和图2,图1为本申请实施方式中客户端软件架构示意图,图2为本申请实施方式中对Dio网络请求进行监控的方法的流程图。
本申请所述对Dio网络请求进行监控的方法应用于客户端中,该客户端构建有Flutter应用层,从而使得该客户端可以运行基于Flutter框架开发的应用程序。同时,在该客户端中,Flutter应用层使用Dio网络请求插件对网络请求进行封装。需要特别指出的是,客户端的具体形式包括但不限于手机、平板电脑、笔记本电脑等终端设备。对Dio网络请求进行监控的方法可以包括以下步骤。
S101:在所述Flutter应用层中嵌入AspectD实现层,以使得当所述Flutter应用层基于第一实现接口发起目标网络请求时,所述AspectD实现层生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例。
在本实施方式中,开发者可以根据实际需要(例如对网络请求的发送时长和响应时长进行监控),预先设置AspectD实现层针对Flutter应用层的切入点,并将设置完毕的AspectD实现层嵌入Flutter应用层中,从而利用AspectD实现层监控Dio网络请求。
在一个实施方式中,在Flutter应用层中嵌入AspectD实现层可以通过如下方式实现:
首先,将AspectD源码注入Flutter框架中,以在所述Flutter框架中创建所述AspectD实现层;
然后,在所述AspectD实现层中添加第一实现接口和第二实现接口的依赖项,以使得所述AspectD实现层对所述第一实现接口和所述第二实现接口进行埋点设置。
在实际应用中,开发者首先可以下载Flutter源码和AspectD源码,然后设置flutter镜像、本地flutter源码地址、flutter bin目录、dart bin目录等环境变量,之后切换到Flutter的git目录,将AspectD源码中的git patch文件合并到Flutter源码工程中,从而将AspectD源码注入Flutter框架中,以完成AspectD环境的搭建。之后,开发者可以删除原有flutter sdk目录下的缓存文件(即删除原来的Flutter编译工具),并重新构建新的Flutter编译工具,然后利用flutter命令创建一个新的Flutter包(称为aspectd_impl),这样,开发者就完成了在Flutter框架中创建AspectD实现层的工作。
在完成AspectD实现层的创建工作后,开发者还需要确定AspectD实现层针对Flutter应用层的切入点,以完成相关的操作。下文以开发者对Dio网络请求进行监控为例,对如何确定AspectD实现层的切入点进行说明。
在实际应用中,Flutter应用层可以使用Dio网络请求插件发起一条网络请求,具体的,Flutter应用层可以使用Dio网络请求插件中的get或者post方法发起网络请求。当Flutter应用层利用Dio网络请求插件发起目标网络请求时,Dio网络请求插件将会创建dio_sendRequest_func接口(称为第一实现接口),并利用上述第一实现接口创建dio实例,最终Flutter应用层可以通过该dio实例发起网络请求(称为目标网络请求)。
当Flutter应用层基于上述第一实现接口,通过上述dio实例发起目标网络请求时,Dio网络请求插件可以通过fetch方法获取目标网络请求的请求头部信息和请求体信息,然后对目标网络请求进行封装。当Dio网络请求插件完成目标网络请求的封装后,Dio网络请求插件可以通过相应的接口向外网发送封装好的目标网络请求。具体的,Dio网络请求插件可以创建dio_fetch_func接口(称为第二实现接口),然后利用该接口向外发送封装好的目标网络请求。因此,如果开发者需要对Dio网络请求进行监控,开发者可以将上述第一实现接口和上述第二实现接口作为AspectD实现层的切入点。
在实际应用中,当开发者完成AspectD实现层的创建工作后,其可以在aspectd_impl包中添加AspectD&example依赖项,从而对Flutt的相关库进行关联,其中,AspectD为开发者下载的AspectD源码,example泛指需要进行监控的Flutter APP应用(例如Dio网络请求插件)。当开发者在aspectd_impl包中添加AspectD&example依赖项后,AspectD实现层便可以在运行时从aspectd_impl包中获取相应的依赖项,以实现相应的功能。针对Dio网络请求监控功能,开发者可以将上述第一实现接口和上述第二实现接口的依赖项添加进aspectd_impl包中,从而使得AspectD实现层可以对上述第一实现接口和上述第二实现接口进行埋点设置。
在一个实施方式中,当Flutter应用层基于第一实现接口发起目标网络请求时,AspectD实现层可以生成第一钩子函数对上述第一实现接口进行挂钩处理,以获取dio实例。在实际应用中,由于开发者已经在aspectd_impl包中添加了上述第一实现接口的依赖项,因此AspectD实现层在运行时可以对第一实现接口(即dio_sendRequest_func接口)进行监控。具体的,AspectD实现层可以利用方法挂钩技术(hook)对第一实现接口进行挂钩处理。AspectD实现层首先可以在aspectd_impl包中生成hook_dio_sendRequest_func函数(称为第一钩子函数),并将第一钩子函数与第一实现接口进行关联。
由于Dio网络请求插件在创建第一实现接口时,系统会生成一个消息通知,该消息通知用于表示第一实现接口已经建立,同时系统还会将该消息通知传递到AspectD实现层,这样当AspectD实现层在接收到该消息通知后,AspectD实现层便可以调用第一钩子函数,从而实现第一钩子函数对第一实现接口的挂钩。当第一钩子函数对第一实现接口进行挂钩处理后,第一钩子函数便可以接管第一实现接口。这样,当Flutter应用层通过上述第一实现接口创建dio实例时,AspectD实现层便可以获取到Flutter应用层生成的dio实例。
在一个实施方式中,当AspectD实现层获取到Flutter应用层生成的dio实例后,AspectD实现层还可以设置拦截器,以通过拦截器监控目标网络请求和目标响应消息,其中,目标响应消息与目标网络请求相对应,亦即目标响应消息为响应端在接收到目标网络请求后,向客户端反馈的响应信息。在实际应用中,AspectD实现层可以创建一个拦截器类来覆盖onRequest、onError、onResponse方法,以在Flutter应用层发送请求之前、请求失败时、接收响应之前做一些预处理,其实现方式可以通过如下代码实现:
Figure BDA0003194806840000061
Figure BDA0003194806840000071
由于第一实现接口和第二实现接口属于继承关系,因此,当AspectD实现层对拦截器进行设置后,AspectD实现层需要释放第一实现接口,从而使得第一实现接口可以调用第二实现接口向外发送目标网络请求。具体的,AspectD实现层可以卸载第一钩子函数,以撤销第一钩子函数与第一调用接口的挂钩,这样,第一实现接口将会被释放,从而使得Flutter应用层可以继续通过原有的网络请求发送流程(即通过第一实现接口调用第二实现接口)向外发送目标网络请求。
需要特别指出的是,如果Flutter应用层配置有代理通道,即客户端需要经过代理服务器向响应端发送目标网络请求,那么AspectD实现层在获取到Flutter应用层生成的dio实例后,AspectD实现层还需要对dio实例设置代理,从而使得目标网络请求在从客户端发出后,目标网络请求可以首先到达代理服务器,然后再经代理服务器中转到达响应端。通过在客户端和响应端之间设置代理服务器,我们可以引入CDN网络来提高用户访问网站的响应速度,从而解决因为链路问题而导致的数据加载缓慢的问题。
需要特别指出的是,本申请以对Dio网络请求进行监控为例进行说明只是示意性的,基于本申请的思想,本领域的技术人员也可以对其它Flutter项目进行监控。在对其它Flutter项目进行监控时,本领域的技术人员只需根据需要确定新的AspectD实现层切入点即可。
S102:当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,所述AspectD实现层生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳,以监控所述目标网络请求的发送时长和响应时长。
在本实施方式中,当第一实现接口创建dio实例后,Flutter应用层便可以调用上述dio实例对目标网络请求进行封装,并利用第二实现接口(即dio_fetch_func接口)向外发送封装好的目标网络请求。在实际应用中,由于开发者已经在aspectd_impl包中添加了上述第二实现接口的依赖项,因此AspectD实现层在运行时可以对第二实现接口进行监控。具体的,AspectD实现层可以利用方法挂钩技术(hook)对第二实现接口进行挂钩处理。AspectD实现层首先可以在aspectd_impl包中生成hook_fetch_func函数(称为第二钩子函数),并将第二钩子函数与第二实现接口进行关联。
由于Dio网络请求插件在创建第二实现接口时,系统会生成一个消息通知,该消息通知用于表示第二实现接口已经建立,同时系统还会将该消息通知传递到AspectD实现层,这样当AspectD实现层在接收到该消息通知后,AspectD实现层便可以调用第二钩子函数,从而实现第二钩子函数对第二实现接口的挂钩。当第二钩子函数对第二实现接口进行挂钩处理后,第二钩子函数便可以接管第二实现接口。这样,当Flutter应用层通过第二实现接口向外发送目标网络请求时,AspectD实现层便可以利用第二钩子函数标记目标网络请求的发送时间戳。相应的,当Flutter应用层通过第二实现接口接收到响应端反馈的目标响应消息时,AspectD实现层便可以利用第二钩子函数标记目标网络请求的响应时间戳。AspectD实现层在标记完目标网络请求的发送时间戳和响应时间戳后,便可以将上述时间戳上报至监控端,从而使得开发者可以监控目标网络请求的发送时长和响应时长。
在一个实施方式中,AspectD实现层通过第二钩子函数标记目标网络请求的发送时间戳包括以下步骤:
首先,在Flutter应用层调用dio实例发送目标网络请求之前,AspectD实现层通过第二钩子函数标记第一时间戳;
然后,在Flutter应用层调用dio实例完成目标网络请求的发送之后,AspectD实现层通过第二钩子函数标记第二时间戳。
在实际应用中,当Dio网络请求插件完成目标网络请求的封装,而尚未发送目标网络请求的请求头部信息和请求体信息时(即Flutter应用层调用dio实例发送目标网络请求之前),AspectD实现层可以通过第二钩子函数标记第一时间戳。当Dio网络请求插件利用第二实现接口向外发送封装好的目标网络请求时(即Flutter应用层调用dio实例完成目标网络请求的发送之后),AspectD实现层可以通过第二钩子函数标记第二时间戳。上述第一时间戳和上述第二时间戳即为目标网络请求的发送时间戳。
当AspectD实现层将上述第一时间戳和上述第二时间戳上报至监控端后,开发者便可以根据第一时间戳和第二时间戳之间的差值,计算出目标网络请求的发送时长,进而判断是否需要对Flutter应用或者网络进行优化。
在一个实施方式中,AspectD实现层通过第二钩子函数标记目标网络请求的响应时间戳包括以下步骤:
首先,在第二实现接口接收到目标响应消息前,AspectD实现层通过第二钩子函数标记第三时间戳;
当第二实现接口接收到目标响应消息后,AspectD实现层通过第二钩子函数标记第四时间戳。
在实际应用中,当目标网络请求发出外网后,目标网络请求指向的源站(即响应端)将接收到目标网络请求。当响应端接收到目标网络请求后,响应端会向客户端反馈响应信息(即目标响应消息),而基于Dio网络请求插件的特点,目标响应消息将由dio_fetch_func接口负责接收,即目标响应消息会被传递至第二实现接口。因此,AspectD实现层可以利用第二钩子函数对目标网络请求的响应时间进行监控。具体的,第二钩子函数可以在第二实现接口接收到目标响应消息之前标记一个时间点(记为第三时间戳),并在第二实现接口接收到目标响应消息之后标记一个时间点(记为第四时间戳)。上述第三时间戳和上述第四时间戳即为目标网络请求的响应时间戳。
相应的,当AspectD实现层将上述第三时间戳和上述第四时间戳上报至监控端后,开发者便可以根据第三时间戳和第四时间戳之间的差值,计算出目标网络请求的响应时长,进而判断是否需要对网络或者响应端进行优化。
在一个实施方式中,拦截器监控目标网络请求和目标响应消息可以通过如下方式实现:
首先,拦截第二实现接口,以获取目标网络请求和目标响应消息;
然后,解析目标网络请求和目标响应消息,以获取目标网络请求的请求头部信息和请求体信息,以及目标响应消息的响应头部信息和响应体信息。
在实际应用中,当AspectD实现层创建拦截器类以覆盖onRequest、onError、onResponse方法后,拦截器便可以对第二实现接口进行拦截,这样当Dio网络请求插件利用第二实现接口向外发送封装好的目标网络请求时,拦截器便可以获取到上述封装好的目标网络请求。当拦截器获取到上述目标网络请求后,拦截器可以对目标网络请求进行解析,从而获取目标网络请求的请求头部信息和请求体信息。进一步的,当拦截器获取到目标网络请求的请求头部信息和请求体信息后,拦截器可以将上述请求头部信息和请求体信息上报至监控端,从而使得开发者可以对目标网络请求进行分析,以实现对目标网络请求的监控。例如,拦截器可以对目标网络请求进行解析,从而获取到请求头部信息中存放的cookie信息、token信息、host信息等,以及请求体信息中存放的post参数和参数数据等信息,之后,拦截器可以将获取到的上述信息上报至监控端。当拦截器完成目标网络请求的请求头部信息和请求体信息的上报工作后,拦截器将向Flutter应用层返回上述目标网络请求,从而使得Flutter应用层可以继续向外发送目标网络请求。
相应的,当第二实现接口接收到响应端反馈的目标响应消息后,拦截器同样可以获取到上述目标响应消息,之后,拦截器可以对上述目标响应消息进行解析,从而获取目标响应消息的响应头部信息和响应体信息。进一步的,当拦截器获取到目标响应消息的响应头部信息和响应体信息后,拦截器可以将上述响应头部信息和响应体信息上报至监控端,从而使得开发者可以对目标响应消息进行分析,以实现对目标响应消息的监控。
需要特别指出的是,当拦截器完成目标响应消息的响应头部信息和响应体信息的上报工作后,拦截器可以将上述目标响应消息返回给Flutter应用层,这样,Flutter应用层就可以在客户端正常展示目标响应消息。
请参阅图3,本申请还提供一种对Dio网络请求进行监控的装置,所述装置应用于客户端中,所述客户端构建有Flutter应用层,所述装置包括:
AspectD嵌入模块,用于在所述Flutter应用层中嵌入AspectD实现层;
AspectD实现层模块,用于当所述Flutter应用层基于第一实现接口发起目标网络请求时,生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例,以及当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳;
网络请求监控模块,用于基于所述发送时间戳和所述响应时间戳,监控所述目标网络请求的发送时长和响应时长。
在一个实施方式中,AspectD嵌入模块,还用于将AspectD源码注入Flutter框架中,以在所述Flutter框架中创建所述AspectD实现层;
AspectD实现层模块,还用于添加所述第一实现接口和所述第二实现接口的依赖项,以对所述第一实现接口和所述第二实现接口进行埋点设置。
在一个实施方式中,所述装置还包括:
拦截器设置模块,用于设置拦截器,以监控所述目标网络请求和目标响应消息,其中,所述目标响应消息与所述目标网络请求相对应;
接口释放模块,用于释放所述第一实现接口,以使得所述第一实现接口调用所述第二实现接口向外发送所述目标网络请求。
在一个实施方式中,通过所述第二钩子函数标记所述目标网络请求的发送时间戳包括:
在所述Flutter应用层调用所述dio实例发送所述目标网络请求之前,通过所述第二钩子函数标记第一时间戳;
在所述Flutter应用层调用所述dio实例完成所述目标网络请求的发送之后,通过所述第二钩子函数标记第二时间戳。
在一个实施方式中,通过所述第二钩子函数标记所述目标网络请求的响应时间戳包括:
在所述第二实现接口接收到所述目标响应消息前,通过所述第二钩子函数标记第三时间戳;
当所述第二实现接口接收到所述目标响应消息后,通过所述第二钩子函数标记第四时间戳。
在一个实施方式中,监控所述目标网络请求的发送时长和响应时长包括:
基于所述第一时间戳和所述第二时间戳,计算所述目标网络请求的发送时长;
基于所述第三时间戳和所述第四时间戳,计算所述目标网络请求的响应时长。
在一个实施方式中,监控所述目标网络请求和目标响应消息包括:
拦截所述第二实现接口,以获取所述目标网络请求和所述目标响应消息;
解析所述目标网络请求和所述目标响应消息,以获取所述目标网络请求的请求头部信息和请求体信息,以及所述目标响应消息的响应头部信息和响应体信息。
请参阅图4,本申请还提供一种对Dio网络请求进行监控的装置,所述装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,可以实现如上述的对Dio网络请求进行监控的方法。具体地,在硬件层面,该装置可以包括处理器、内部总线和存储器。所述存储器可以包括内存以及非易失性存储器。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行。本领域普通技术人员可以理解,图4所示的结构仅为示意,其并不对上述装置的结构造成限定。例如,所述装置还可包括比图4中所示更多或者更少的组件,例如还可以包括其他的处理硬件,如GPU(GraphicsProcessing Unit,图像处理器),或者对外通信端口等。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等。
本实施方式中,所述的处理器可以包括中央处理器(CPU)或图形处理器(GPU),当然也可以包括其他的具有逻辑处理能力的单片机、逻辑门电路、集成电路等,或其适当组合。本实施方式所述的存储器可以是用于保存信息的记忆设备。在数字系统中,能保存二进制数据的设备可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也可以为存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也可以叫存储器等。实现的时候,该存储器也可以采用云存储器的方式实现,具体实现方式,本说明书不做限定。
需要说明的是,本说明书中的对Dio网络请求进行监控的装置,具体的实现方式可以参照方法实施方式的描述,在此不作一一赘述。
由此可见,本申请提供的技术方案,首先在Flutter框架中引入AspectD实现层,然后利用AspectD实现层对Flutter应用层进行挂钩处理,以获取dio实例,这样当Flutter应用层调用dio实例对网络请求进行封装时,AspectD实现层便可以对网络请求的发送时长、数据的加载时间等网络情况进行监控,并且当Flutter应用层接收到对应的响应信息时,AspectD实现层同样可以对网络请求的响应时长进行监控。如此,通过利用AspectD实现层对Dio网络请求底层库中的特定方法和特定位置进行无痕埋点,便可以在不对Flutter应用代码进行任何修改的情况下,获取到Dio网络请求的发送时长、响应时长等数据指标。同时,通过设置拦截器,AspectD实现层还可以对网络请求的请求头部信息和请求体信息,以及响应信息的响应头部信息和响应体信息进行监控,这样,开发者便可以根据监控情况,对Flutter应用进行针对性的优化。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件来实现。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (11)

1.一种对Dio网络请求进行监控的方法,其特征在于,所述方法应用于客户端中,所述客户端构建有Flutter应用层,所述方法包括:
在所述Flutter应用层中嵌入AspectD实现层,以使得当所述Flutter应用层基于第一实现接口发起目标网络请求时,所述AspectD实现层生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例;
当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,所述AspectD实现层生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳,以监控所述目标网络请求的发送时长和响应时长。
2.根据权利要求1所述的方法,其特征在于,在所述Flutter应用层中嵌入AspectD实现层包括:
将AspectD源码注入Flutter框架中,以在所述Flutter框架中创建所述AspectD实现层;
在所述AspectD实现层中添加所述第一实现接口和所述第二实现接口的依赖项,以使得所述AspectD实现层对所述第一实现接口和所述第二实现接口进行埋点设置。
3.根据权利要求1所述的方法,其特征在于,当所述AspectD实现层获取dio实例后,所述方法还包括:
设置拦截器,以监控所述目标网络请求和目标响应消息,其中,所述目标响应消息与所述目标网络请求相对应;
释放所述第一实现接口,以使得所述第一实现接口调用所述第二实现接口向外发送所述目标网络请求。
4.根据权利要求1所述的方法,其特征在于,所述AspectD实现层通过所述第二钩子函数标记所述目标网络请求的发送时间戳包括:
在所述Flutter应用层调用所述dio实例发送所述目标网络请求之前,所述AspectD实现层通过所述第二钩子函数标记第一时间戳;
在所述Flutter应用层调用所述dio实例完成所述目标网络请求的发送之后,所述AspectD实现层通过所述第二钩子函数标记第二时间戳。
5.根据权利要求4所述的方法,其特征在于,所述AspectD实现层通过所述第二钩子函数标记所述目标网络请求的响应时间戳包括:
在所述第二实现接口接收到所述目标响应消息前,所述AspectD实现层通过所述第二钩子函数标记第三时间戳;
当所述第二实现接口接收到所述目标响应消息后,所述AspectD实现层通过所述第二钩子函数标记第四时间戳。
6.根据权利要求5所述的方法,其特征在于,监控所述目标网络请求的发送时长和响应时长包括:
基于所述第一时间戳和所述第二时间戳,计算所述目标网络请求的发送时长;
基于所述第三时间戳和所述第四时间戳,计算所述目标网络请求的响应时长。
7.根据权利要求3所述的方法,其特征在于,监控所述目标网络请求和目标响应消息包括:
拦截所述第二实现接口,以获取所述目标网络请求和所述目标响应消息;
解析所述目标网络请求和所述目标响应消息,以获取所述目标网络请求的请求头部信息和请求体信息,以及所述目标响应消息的响应头部信息和响应体信息。
8.一种对Dio网络请求进行监控的装置,其特征在于,所述装置应用于客户端中,所述客户端构建有Flutter应用层,所述装置包括:
AspectD嵌入模块,用于在所述Flutter应用层中嵌入AspectD实现层;
AspectD实现层模块,用于当所述Flutter应用层基于第一实现接口发起目标网络请求时,生成第一钩子函数对所述第一实现接口进行挂钩处理,以获取dio实例,以及当所述Flutter应用层调用所述dio实例,并基于第二实现接口向外发送所述目标网络请求时,生成第二钩子函数对所述第二实现接口进行挂钩处理,并通过所述第二钩子函数标记所述目标网络请求的发送时间戳和响应时间戳;
网络请求监控模块,用于基于所述发送时间戳和所述响应时间戳,监控所述目标网络请求的发送时长和响应时长。
9.根据权利要求8所述的装置,其特征在于,
AspectD嵌入模块,还用于将AspectD源码注入Flutter框架中,以在所述Flutter框架中创建所述AspectD实现层;
AspectD实现层模块,还用于添加所述第一实现接口和所述第二实现接口的依赖项,以对所述第一实现接口和所述第二实现接口进行埋点设置。
10.根据权利要求8所述的装置,其特征在于,所述装置还包括:
拦截器设置模块,用于设置拦截器,以监控所述目标网络请求和目标响应消息,其中,所述目标响应消息与所述目标网络请求相对应;
接口释放模块,用于释放所述第一实现接口,以使得所述第一实现接口调用所述第二实现接口向外发送所述目标网络请求。
11.一种对Dio网络请求进行监控的装置,其特征在于,所述装置包括存储器和处理器,所述存储器用于存储计算机程序,当所述计算机程序被所述处理器执行时,实现如权利要求1至7中任一权利要求所述的方法。
CN202110887717.2A 2021-08-03 2021-08-03 一种对Dio网络请求进行监控的方法和装置 Active CN113765740B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110887717.2A CN113765740B (zh) 2021-08-03 2021-08-03 一种对Dio网络请求进行监控的方法和装置
PCT/CN2022/072070 WO2023010814A1 (zh) 2021-08-03 2022-01-14 一种对Dio网络请求进行监控的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110887717.2A CN113765740B (zh) 2021-08-03 2021-08-03 一种对Dio网络请求进行监控的方法和装置

Publications (2)

Publication Number Publication Date
CN113765740A true CN113765740A (zh) 2021-12-07
CN113765740B CN113765740B (zh) 2022-12-20

Family

ID=78788470

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110887717.2A Active CN113765740B (zh) 2021-08-03 2021-08-03 一种对Dio网络请求进行监控的方法和装置

Country Status (2)

Country Link
CN (1) CN113765740B (zh)
WO (1) WO2023010814A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114363204A (zh) * 2021-12-09 2022-04-15 网宿科技股份有限公司 请求监控方法、网络设备及存储介质
CN114745415A (zh) * 2022-03-17 2022-07-12 中汽创智科技有限公司 一种车辆业务通信数据处理方法、装置、设备及存储介质
WO2023010814A1 (zh) * 2021-08-03 2023-02-09 网宿科技股份有限公司 一种对Dio网络请求进行监控的方法和装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103825783A (zh) * 2014-03-10 2014-05-28 珠海市君天电子科技有限公司 一种测试方法及装置
WO2017084508A1 (zh) * 2015-11-17 2017-05-26 阿里巴巴集团控股有限公司 自动埋点方法和装置
CN110737589A (zh) * 2019-09-10 2020-01-31 北京字节跳动网络技术有限公司 一种自动埋点的方法、装置、介质和电子设备
CN111090433A (zh) * 2019-10-23 2020-05-01 贝壳技术有限公司 一种数据处理的方法、装置和存储介质
CN111314419A (zh) * 2020-01-16 2020-06-19 广州酷狗计算机科技有限公司 网络请求方法及装置
CN112235357A (zh) * 2020-09-23 2021-01-15 建信金融科技有限责任公司 跨平台应用开发系统
CN112242972A (zh) * 2019-07-16 2021-01-19 腾讯科技(武汉)有限公司 网络请求处理方法、装置、存储介质及终端
CN112463519A (zh) * 2020-11-05 2021-03-09 广州博恒信息科技有限责任公司 基于Flutter的页面使用行为数据无埋点统计方法、设备及存储介质
CN112953969A (zh) * 2021-03-30 2021-06-11 平安科技(深圳)有限公司 网络请求的响应方法、装置、计算机设备及存储介质

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7318220B2 (en) * 2004-03-11 2008-01-08 International Business Machines Corporation System and method for measuring latch contention
US8578487B2 (en) * 2010-11-04 2013-11-05 Cylance Inc. System and method for internet security
CN113765740B (zh) * 2021-08-03 2022-12-20 网宿科技股份有限公司 一种对Dio网络请求进行监控的方法和装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103825783A (zh) * 2014-03-10 2014-05-28 珠海市君天电子科技有限公司 一种测试方法及装置
WO2017084508A1 (zh) * 2015-11-17 2017-05-26 阿里巴巴集团控股有限公司 自动埋点方法和装置
CN112242972A (zh) * 2019-07-16 2021-01-19 腾讯科技(武汉)有限公司 网络请求处理方法、装置、存储介质及终端
CN110737589A (zh) * 2019-09-10 2020-01-31 北京字节跳动网络技术有限公司 一种自动埋点的方法、装置、介质和电子设备
CN111090433A (zh) * 2019-10-23 2020-05-01 贝壳技术有限公司 一种数据处理的方法、装置和存储介质
CN111314419A (zh) * 2020-01-16 2020-06-19 广州酷狗计算机科技有限公司 网络请求方法及装置
CN112235357A (zh) * 2020-09-23 2021-01-15 建信金融科技有限责任公司 跨平台应用开发系统
CN112463519A (zh) * 2020-11-05 2021-03-09 广州博恒信息科技有限责任公司 基于Flutter的页面使用行为数据无埋点统计方法、设备及存储介质
CN112953969A (zh) * 2021-03-30 2021-06-11 平安科技(深圳)有限公司 网络请求的响应方法、装置、计算机设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023010814A1 (zh) * 2021-08-03 2023-02-09 网宿科技股份有限公司 一种对Dio网络请求进行监控的方法和装置
CN114363204A (zh) * 2021-12-09 2022-04-15 网宿科技股份有限公司 请求监控方法、网络设备及存储介质
CN114745415A (zh) * 2022-03-17 2022-07-12 中汽创智科技有限公司 一种车辆业务通信数据处理方法、装置、设备及存储介质
CN114745415B (zh) * 2022-03-17 2024-03-26 中汽创智科技有限公司 一种车辆业务通信数据处理方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN113765740B (zh) 2022-12-20
WO2023010814A1 (zh) 2023-02-09

Similar Documents

Publication Publication Date Title
CN113765740B (zh) 一种对Dio网络请求进行监控的方法和装置
TWI705336B (zh) 用於支援線上升級的設備和方法
CN107038045B (zh) 加载库文件的方法及装置
US9262300B1 (en) Debugging computer programming code in a cloud debugger environment
US20150378756A1 (en) Systems and methods for mobile application tracing instrumentation
US20210311859A1 (en) Orchestration for automated performance testing
US8539506B2 (en) Dynamic injection of code into running process
US20160224329A1 (en) Automated software configuration management
CN111880987A (zh) 应用程序的动态监测方法、装置、存储介质以及电子装置
CN109743359B (zh) Hybrid通讯处理方法、装置、计算机设备及存储介质
US9817655B1 (en) Managing software assets installed in an integrated development environment
TW201351324A (zh) 無線應用發佈、實現方法與裝置
CN111209122B (zh) 接口调用方法、装置、电子设备及存储介质
CN111580926A (zh) 模型发布方法、模型部署方法、装置、设备及存储介质
US20170352115A1 (en) Mobile application licensing tool
WO2021115177A1 (zh) 应用安装方法、装置、终端设备、服务器及存储介质
CN110928571A (zh) 业务程序开发方法和装置
CN109725887B (zh) 基于消息研发框架的数据交互方法、装置及终端设备
US9971611B2 (en) Monitoring a mobile device application
CN113138768B (zh) 应用程序包生成方法、装置、电子设备以及可读存储介质
CN106775916B (zh) 减小应用安装包的方法、装置及电子设备
CN110221830B (zh) 一种在PC上加载WebView的方法及系统
US10073689B2 (en) Managing application lifecycles within a federation of distributed software applications
CN114721740B (zh) 消息触发方法、装置、设备及存储介质
CN110825373A (zh) 一种移动端动态化方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant