HarmonyOS鸿蒙Next中如何解决创建RCP请求基类对象失败的问题

HarmonyOS鸿蒙Next中如何解决创建RCP请求基类对象失败的问题

【问题现象】

创建RCP请求对象时失败,导致所有网络请求失败。

错误码:1007900994,报错信息:Sessions number reached limit。

【定位思路】

  1. 伙伴定义的RCP对象如下:
class RcpClass {
  cache:ResponseCache = new ResponseCache();
  session = rcp.createSession({
    interceptors: [new ResponseCachingInterceptor(this.cache)]
  });
  url?: string
  content?: rcp.RequestContent
  constructor(url:string,content: rcp.RequestContent) {
    this.url = url;
    this.content = content
  }
  async post(){
    return await this.session.post(this.url,this.content)
  }
  // 继续封装其他方法 get、fetch、put等
}
  1. 从报错信息来看,是同时创建多个session对象,导致session资源超限。后来在细节的沟通中发现在session使用后,并没有及时关闭session连接,导致session超限,因此在再次创建新的session对象时才会报错,创建失败。

【解决方案】

  1. 方案思路:

(1)首先建议使用全局session对象。

(2)排查过程中发现伙伴session使用后未调用session.close()关闭session连接,导致session超过限制。

  1. 全局session对象示例代码:
export class SessionManager{
  static session: rcp.Session;
  static creatSession() : rcp.Session{
    if (! SessionManager.session) {
      SessionManager.session  =  SessionManager.session  = rcp.createSession({
         interceptors: [new ResponseCachingInterceptor(cache)],
       });
    }
    return SessionManager.session
  }
}

async function testInterceptor() {
  const session = SessionManager.creatSession();
  const response1 = await session.get('https://www.example.com');
  let request = new rcp.Request("https://www.example.com", 'GET');
  const response2 = await session.fetch(request);
}

注意

session使用后需要及时调用session.close()将session关闭。

【总结】

  1. 尽量使用全局 session,增加资源复用。

  2. session使用完成后,及时调用session.close()关闭session,避免资源超限。


更多关于HarmonyOS鸿蒙Next中如何解决创建RCP请求基类对象失败的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中如何解决创建RCP请求基类对象失败的问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,创建RCP请求基类对象失败可能由以下原因导致:

  1. 依赖库未正确引入:确保项目中已正确引入RCP相关的依赖库,检查build.gradle文件中是否包含必要的依赖项。

  2. 权限问题:检查应用是否具备必要的权限,如网络权限等。在config.json文件中确认权限配置是否正确。

  3. API版本不匹配:确认使用的API版本与设备或模拟器的系统版本兼容。不同版本的API可能存在差异,导致对象创建失败。

  4. 初始化顺序错误:确保在创建RCP请求基类对象之前,相关组件或服务已正确初始化。检查代码逻辑,确保初始化顺序无误。

  5. 资源文件缺失或错误:检查项目中是否存在缺失或错误的资源文件,如布局文件、字符串资源等,这些可能导致对象创建失败。

  6. 日志分析:查看日志输出,定位具体错误信息。使用HiLogLogcat工具,分析日志中的异常堆栈,找出问题根源。

  7. 代码实现问题:检查代码实现,确保RCP请求基类对象的创建逻辑正确。确认构造函数参数、方法调用等是否符合API要求。

通过以上步骤,可以逐步排查并解决创建RCP请求基类对象失败的问题。

回到顶部