当前位置: 首页 > news >正文

鸿蒙应用之网络请求方案总结

一、总体览表

方案最低 API Level依赖线程模型官网状态备注
@ohos.net.http80 依赖TaskPool/WorkerStable系统内置,支持 HTTP/2、HTTPDNS
@ohos/axios9ohpm 1.4.2PromiseCommunity语法同 Web Axios,内部仍封装 http 模块
WebSocket80 依赖事件派发Stable最大 16 KB 单帧,支持子协议
TCP/UDP Socket80 依赖异步回调Stable需自己处理粘包、心跳、加密
RCP (Remote Communication Platform)100 依赖协程Stable鸿蒙官方“Retrofit”,支持接口注解、连接池、QUIC

二、权限配置(HarmonyOS NEXT 真机必须)

// module.json5
"requestPermissions": [{ "name": "ohos.permission.INTERNET" }   // 唯一强制权限
],
"deviceConfig": {"default": {"network": {"cleartextTraffic": true             // 仅当要走 HTTP 明文时需要}}
}

⚠️ 注意

  • GET_NETWORK_INFO / SET_NETWORK_INFO 不是网络请求必需,仅在你需要「枚举网卡 / 切换默认网络」时才加。
  • HarmonyOS NEXT 开始,所有敏感权限(如位置、相机)都必须动态申请;INTERNET 仍保持 system_grant,声明即生效。

三、方案

3.1 原生 HTTP(@ohos.net.http)

import { http } from '@kit.NetworkKit';   
✅ 生命周期管理
const req = http.createHttp();
try {const res = await req.request(url, opts);return res.result;
} finally {req.destroy();          // 忘记 destroy 将泄漏 native 句柄
}
✅ HTTP/2 & HTTPDNS 一键开启
http.request(url, {// ...usingHttpdns: true,     // 50-100 ms 解析,防劫持usingProtocol: 'HTTP2'  // 单连接多路复用,减少 30%+ 延迟
});

3.2 Axios(@ohos/axios)

//axios拦截
axios.interceptors.request.use(config => {config.headers['X-Token'] = AppStorage.Get('token');return config;
});

3.3 WebSocket

✅ 子协议协商
webSocket.connect(url, {header: { 'Sec-WebSocket-Protocol': 'chat' }
});
✅ 自动重连
let reconnect = 0;
ws.on('close', () => {if (reconnect < 3) {setTimeout(() => {reconnect++;ws.connect(url);   // 再次握手}, 1000 * reconnect);}
});

3.4 TCP/UDP Socket

import { socket } from '@kit.NetworkKit';
const server = socket.buildTcpServer();
const client = socket.buildTcp();
  • 粘包处理:官网提供 DelimiterDecoder 工具类,可直接按 \n 或自定义长度解码,无需手写循环读。

3.5 RCP(该方案目前仅支持Harmony Next ,不支持openHarmony)

特点:

  • 接口注解驱动
  • 内置连接池、QUIC、GZIP
  • 协程写法,杜绝回调地狱
interface ApiService {@GET('user/{id}')getUser(@Path('id') id: number): Promise<User>
}const api = RCP.create(ApiService, { baseURL: 'https://api.example.com' });
const user = await api.getUser(123);

四、缓存 & 优化

级别官方 API备注
内存@ohos.util.LruCache线程安全,支持自定义淘汰策略
磁盘@ohos.data.preferences + 文件锁非大文件场景(<1 MB)
网络Cache-Control仅 RCP / Axios 支持,原生 http 需手动解析头

五、弱网/无网适配

  1. 监听网络能力而非单纯“在线/离线”:
netConn.on('netCapabilitiesChange', (cap) => {const isValidated = cap.hasCapability(NetCapabilities.NET_CAPABILITY_VALIDATED);const isWifi = cap.hasTransport(NetTransportType.WIFI);// 按需降级
});
  1. 预置热点数据
    利用 RDB+索引RelationalStore 把首页、个人中心等核心数据做 7 天保质期 持久化,无网时直接读库。

  2. 图片/视频
    开启 HEIF + WebP 自适应,蜂窝网自动降分辨率 50%,代码示例:

Image({ src: url }).sourceSize(isCellular ? { width: 180 } : { width: 720 })

六、常见错误速查

错误码含义解决
2300001无网络检查 INTERNET 权限 + 网络能力
2300002主机不可达确认 cleartextTraffic 或 HTTPS 证书
2300003超时调大 connectTimeout / 使用 HTTPDNS
2300006证书校验失败导入自定义 CA,或在调试阶段允许 untrustedCA:true

八、结语 & 快速选型

  • 普通 REST@ohos/axios(开发快)或 RCP(性能最优)
  • 实时推送WebSocket(支持子协议、自动重连)
  • 私有协议TCP/UDP Socket(记得用新 API + 粘包解码器)
  • 图片/大文件下载 → 开启 HTTP/2 + 断点续传(RCP 已内置)

保持依赖最小化、权限声明最简、生命周期最严谨


文章转载自:

http://PS5wloSI.rdnkx.cn
http://aYITApMJ.rdnkx.cn
http://indbondg.rdnkx.cn
http://d6kBYbjk.rdnkx.cn
http://ITpxb2ex.rdnkx.cn
http://JHcGdWzG.rdnkx.cn
http://BdmYRJ1l.rdnkx.cn
http://UFVG28Vw.rdnkx.cn
http://UM21zCE9.rdnkx.cn
http://priEmLAC.rdnkx.cn
http://KKbKxWyR.rdnkx.cn
http://yW2zEiTI.rdnkx.cn
http://xzfElkkT.rdnkx.cn
http://Sd4CaOum.rdnkx.cn
http://w2NeJczN.rdnkx.cn
http://GRrpahgi.rdnkx.cn
http://HXddvOS0.rdnkx.cn
http://gv1VHdOP.rdnkx.cn
http://21qHjTa1.rdnkx.cn
http://uav0vV7o.rdnkx.cn
http://FF8bQANN.rdnkx.cn
http://ZRfxxuZh.rdnkx.cn
http://P7oKry1u.rdnkx.cn
http://QarigySU.rdnkx.cn
http://7aAd0x9l.rdnkx.cn
http://yVEwndaa.rdnkx.cn
http://hfyiqtwc.rdnkx.cn
http://3VaryOXd.rdnkx.cn
http://EQrtyAfE.rdnkx.cn
http://NaW5LAfT.rdnkx.cn
http://www.dtcms.com/a/376344.html

相关文章:

  • 技术文章大纲:AI绘画—动漫角色生成赛
  • HTTPS 端口号详解 443 端口作用、iOS 抓包方法、常见 HTTPS 抓包工具与网络调试实践
  • 【iOS】单例模式
  • 工业智能终端赋能自动化生产线建设数字化管理
  • 在Vue项目中Axios发起请求时的小知识
  • eclipse怎么把项目设为web
  • 三维GIS开发实战!Cesium + CZML 实现火箭飞行与分离的 3D 动态模拟
  • Hybrid应用性能优化实战分享(本文iOS 与 H5为例,安卓同理)
  • Python 常用数据类型详解:相同点、差异与使用指南
  • Elasticsearch安装启动常见问题全解析
  • webpack turbopack vite 前端打包工具
  • NLP项目实战 | Word2Vec对比Glove进行词类比测试
  • 基于密集型复杂城市场景下求解无人机三维路径规划的Q-learning算法研究(matlab)
  • 南京大学 LLM开发基础(一)前向反向传播搭建
  • GitHub 热榜项目 - 日榜(2025-09-10)
  • 基于YOLO集成模型的无人机多光谱风电部件缺陷检测
  • ssh域名过期,消息推送到企业微信
  • 【Python】爬虫html提取内容基础,bs4
  • zabbix告警推送钉钉
  • Android系统框架知识系列(二十):专题延伸:JVM vs ART/Dalvik - Android运行时演进深度解析
  • 关于在pycharm终端连接服务器
  • VPS、云服务器、独立服务器的区别是什么?新手服务器选择指南
  • 10. 游戏开发中的TCP与UDP
  • 第1章:操作系统和计算机网络
  • 在uniapp/vue项目中全局挂载component
  • 【ubuntu 24.04 LTS】真实实验部署ollama0.11.6+deepseekR1:1.5b+open-webUI
  • [万字长文]AJAX入门-常用请求方法和数据提交、HTTP协议-报文、接口文档、案例实战
  • 基于 Vue3 + VueOffice 的多格式文档预览组件实现(支持 PDF/Word/Excel/PPT)
  • 【Unity UGUI 交互组件——Scrollbar(8)】
  • 报错Failed to set ntp: NTP not supported