需要输入 Cronet_RequestFinishedInfo 对象,这又是个什么东东,经过一番搜索,发现唯一途径是通过一个回调:
// The app implements abstract interface Cronet_RequestFinishedInfoListener by// defining custom functions for each method.typedef void (*Cronet_RequestFinishedInfoListener_OnRequestFinishedFunc)( Cronet_RequestFinishedInfoListenerPtr self, Cronet_RequestFinishedInfoPtr request_info, Cronet_UrlResponseInfoPtr response_info, Cronet_ErrorPtr error);
这个回调又是经由 Cronet_RequestFinishedInfoListener 对象设置的:
///////////////////////// Abstract interface Cronet_RequestFinishedInfoListener is implemented by the// app.// There is no method to create a concrete implementation.// Destroy an instance of Cronet_RequestFinishedInfoListener.CRONET_EXPORT void Cronet_RequestFinishedInfoListener_Destroy( Cronet_RequestFinishedInfoListenerPtr self);// Set and get app-specific Cronet_ClientContext....// The app implements abstract interface Cronet_RequestFinishedInfoListener by// defining custom functions for each method.typedef void (*Cronet_RequestFinishedInfoListener_OnRequestFinishedFunc)( Cronet_RequestFinishedInfoListenerPtr self, Cronet_RequestFinishedInfoPtr request_info, Cronet_UrlResponseInfoPtr response_info, Cronet_ErrorPtr error);//www.mbp.zuqba.info The app creates an instance of Cronet_RequestFinishedInfoListener by// providing custom functions for each method.CRONET_EXPORT Cronet_RequestFinishedInfoListenerPtrCronet_RequestFinishedInfoListener_CreateWith( Cronet_RequestFinishedInfoListener_OnRequestFinishedFunc OnRequestFinishedFunc);
看这个 CreateWith 接口,它的唯一参数就是上面声明的用户回调。这一系列接口其实是创建了一个侦听器,之后还需要关联到引擎才能生效:
void on_request_finished_listener(
Cronet_RequestFinishedInfoListenerPtr self,
Cronet_RequestFinishedInfoPtr request_info,
Cronet_UrlResponseInfoPtr response_info,
Cronet_ErrorPtr error){
}
...int main() {soccer.js.jrzb2.info // 1. 创建引擎
Cronet_EnginePtr engine = Cronet_Engine_Create();
Cronet_EngineParamsPtr params = Cronet_EngineParams_Create();
Cronet_Engine_StartWithParams(engine, params);
... // 5. 创建执行器
Cronet_ExecutorPtr executor = Cronet_Executor_CreateWith(executor_func);
...
Cronet_RequestFinishedInfoListenerPtr listener = Cronet_RequestFinishedInfoListener_CreateWith(on_request_finished_listener); if (listener) {
Cronet_Engine_AddRequestFinishedListener(engine, listener, executor); std::cout << "request finished listener registered" << std::endl;
} else { std::cout << "setup request finished listener failed, no connection statistic provided" << std::endl;
}
...
// 8. 清理资源
Cronet_UrlRequest_Destroy(request);
Cronet_HttpHeader_Destroy(header);
Cronet_UrlRequestParams_Destroy(req_params);
if (listener) {
Cronet_Engine_RemoveRequestFinishedListener(engine, listener);
Cronet_RequestFinishedInfoListener_Destroy(listener);
}
Cronet_Executor_Destroy(executor);
Cronet_UrlRequestCallback_Destroy(callback);
Cronet_EngineParams_Destroy(params);
Cronet_Engine_Destroy(engine);
return 0;
}
关联侦听器的接口如下:
CRONET_EXPORTvoid Cronet_Engine_AddRequestFinishedListener( Cronet_EnginePtr self, Cronet_RequestFinishedInfoListenerPtr listener, Cronet_ExecutorPtr executor); CRONET_EXPORTvoid Cronet_Engine_RemoveRequestFinishedListener( Cronet_EnginePtr self, Cronet_RequestFinishedInfoListenerPtr listener);
这样整个流程就串起来了: 在 Cronet_Engine 初始化时创建并 关联一个 Cronet_RequestFinishedInfoListener 对象,该对象 持有一个 Cronet_RequestFinishedInfoListener_OnRequestFinished 类型的用户回调,当连接结束时 cronet 会将性能信息通过该回调 通知到用户,用户通过回调的第二个 参数 request_info 获取链接性能信息,即 Cronet_RequestFinishedInfo -> Cronet_Metrics,再通过后者的一系列 接口获取感兴趣的信息。
从整个流程可以看出:
* 性能信息只有在连接关闭时才能获取到
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3107313/ ,如需转载,请注明出处,否则将追究法律责任。