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

鸿蒙游戏网络层设计:为什么不能直接用 fetch?

网罗开发(小红书、快手、视频号同名)

大家好,我是展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


文章目录

    • 引言
    • 一、为什么不能直接用 fetch?
      • 页面直接请求
      • 问题 1:状态绕过 Store
      • 问题 2:逻辑分散
      • 问题 3:无法多端同步
      • 问题 4:无法接入 AI
    • 二、正确思路:网络层 = 数据流的一部分
    • 三、第一步:封装 Network 层
      • 基础封装
    • 四、第二步:引入 Service
      • 错误
      • 正确
      • 示例
    • 五、第三步:统一进入 Store
    • 六、第四步:支持多端同步
      • 正确方案
      • 同步
    • 七、第五步:支持 AI
      • 错误
      • 正确
      • AI 触发请求
      • Service 处理
    • 八、第六步:统一错误处理
      • fetch 分散处理
      • Network 层统一处理
      • Store 统一响应
    • 九、完整网络架构
    • 十、为什么这个架构是必须的?
      • 1、可维护性
      • 2、可扩展性
      • 3、性能优化
      • 4、数据一致性
    • 十一、常见错误
    • 总结

引言

很多人做鸿蒙游戏时,第一反应是:

fetch("https://api.xxx.com/data")

简单、直接、能跑。

但只要项目稍微复杂一点,你很快就会发现:

  • 请求到处都是
  • 错误处理混乱
  • 状态不同步
  • 多端直接崩

最后你会意识到:

问题不是 fetch 不好,而是你缺少“网络层设计”。

在 HarmonyOS 的游戏架构中:

网络层,必须是 Store 体系的一部分,而不是工具函数。

一、为什么不能直接用 fetch?

我们先看一个典型“错误写法”。

页面直接请求

asyncloadData(){constres=awaitfetch("/api/score")constdata=awaitres.json()this.score=data.score}

看起来没问题,但问题非常多:

问题 1:状态绕过 Store

API → UI

Store 完全失效。

问题 2:逻辑分散

  • A 页面请求一次
  • B 页面再请求一次

无法复用。

问题 3:无法多端同步

手机请求了 TV 不知道

问题 4:无法接入 AI

AI 想用数据怎么办?没入口。

本质问题一句话总结:

fetch 是“调用工具”,不是“架构方案”。

二、正确思路:网络层 = 数据流的一部分

在鸿蒙游戏中,正确的数据流是:

UI → Action → Service → Network → Store → UI

注意:

网络请求不能直接改 UI,必须进入 Store

三、第一步:封装 Network 层

基础封装

// network/HttpClient.etsexportclassHttpClient{asyncget(url:string){constres=awaitfetch(url)returnres.json()}}exportconsthttpClient=newHttpClient()

目的:

  • 统一入口
  • 可扩展

四、第二步:引入 Service

错误

UI→ fetch

正确

UI→ Service → Network

示例

// services/ScoreService.etsimport{httpClient}from'../network/HttpClient'import{gameStore}from'../store/GameStore'exportclassScoreService{asyncfetchScore(){constdata=awaithttpClient.get("/api/score")gameStore.dispatch({type:'SET_SCORE',payload:data.score})}}exportconstscoreService=newScoreService()

核心:

网络请求 → 转换成 Action

五、第三步:统一进入 Store

dispatch(action){this.reduce(action)}
case'SET_SCORE':this.state.score=action.payload

数据流变成:

API → Action → Store → UI

六、第四步:支持多端同步

如果你直接用 fetch:每个设备都要请求。

正确方案

dispatch(action){this.reduce(action)this.syncToDevices(action)}

同步

syncToDevices(action){distributedSync.send(action)}

结果:

一个设备请求 → 所有设备更新

本质:

同步 Action,而不是重复请求

七、第五步:支持 AI

AI 需要数据怎么办?

错误

ai.fetch("/api/score")

AI 和系统脱离。

正确

constscore=gameStore.state.score

AI 直接读 Store。

AI 触发请求

agent.decide(){return{type:'FETCH_SCORE'}}

Service 处理

if(action.type==='FETCH_SCORE'){scoreService.fetchScore()}

本质:

AI 通过 Action 触发网络

八、第六步:统一错误处理

fetch 分散处理

try{}catch{}

到处都是。

Network 层统一处理

asyncget(url:string){try{constres=awaitfetch(url)returnres.json()}catch(e){thrownewError("Network Error")}}

Store 统一响应

case'FETCH_ERROR':this.state.error=action.payload

UI 统一处理。

九、完整网络架构

UI ↓ Action ↓ Service ↓ HttpClient(fetch封装) ↓ API ↓ Service(处理) ↓ Action ↓ Store ↓ UI

扩展:

Store ↓ 多端同步 ↓ 其他设备

十、为什么这个架构是必须的?

1、可维护性

所有请求集中在 Service

2、可扩展性

轻松支持:

  • AI
  • 多端
  • 缓存

3、性能优化

可以加:

cache.get(url)

4、数据一致性

所有设备数据一致

十一、常见错误

1、UI 直接 fetch:架构崩。

2、多个地方请求同一接口:数据不一致。

3、AI 直接请求 API:系统割裂。

4、不同设备重复请求:性能浪费。

总结

鸿蒙游戏网络层设计的核心结论:

你不能直接用 fetch,是因为它不在数据流里。

正确架构是:

fetch 只是底层工具 Service 才是业务入口 Store 才是数据中心

完整链路:

UI → Action → Service → Network → Store → UI

在 HarmonyOS 中,这种设计带来的不是“代码规范”,而是:

从“请求数据”,升级为“管理数据流”。

不用 fetch 的本质,不是不用 API,而是不让它“绕开系统”。

http://www.jsqmd.com/news/643953/

相关文章:

  • 3步轻松解密网易云音乐NCM文件:免费转换工具完全指南
  • 斯坦福发布「2026年AI指数报告」:中美AI差距缩小,各领域发展态势不一!
  • STK光照计算模型实战:手把手教你分析卫星在轨阴影与供电周期
  • 探讨兆声波清洗机品牌,哪个能实现纳米级洁净并支持定制选哪家 - 工业设备
  • MusePublic Art Studio效果对比:传统算法与深度学习艺术生成差异
  • 如何通过3个步骤让普通耳机实现专业级音质:音频优化工具完全指南
  • 【含文档+PPT+源码】基于SpringBoot+Vue的医院挂号预约管理系统
  • 春天,来吧
  • 百度网盘下载加速终极方案:免费开源网盘直链下载助手完全指南
  • 从PointNet++到PointNeXt:手把手教你用S3DIS数据集训练并可视化3D语义分割结果
  • 如何轻松解决C盘爆红问题:WindowsCleaner完整使用指南
  • 你知道吗?大润发购物卡也能回收变现,流程简单又安全! - 团团收购物卡回收
  • 2026年有实力的手术室净化工程生产商推荐,选购指南为你支招 - 工业推荐榜
  • 云南最推荐的工装企业有哪些?2026年云南等地市场选择前十排名 - 十大品牌榜
  • Blender3mfFormat插件终极指南:实现专业级3D打印工作流
  • 发那科焊接机器人二保焊节气阀
  • LFM2.5-1.2B-Thinking-GGUF保姆级教学:从health接口检测到generate接口压测全步骤
  • 2026 年网站建设行业白皮书:AI 深度融合与合规驱动下的 6 大变革方向
  • 崩坏星穹铁道全自动助手终极指南:从零开始解放你的游戏时间
  • 2026年靠谱的手术室净化工程生产商推荐,合作案例多设计水平高选哪家 - mypinpai
  • 闲鱼数据采集终极指南:三步自动化抓取商品信息与Excel报表生成
  • 云南最推荐的职业装企业有哪些?2026年市场选择前十排名 - 十大品牌榜
  • SITS2026专家闭门报告:97.3%的团队忽略的模态异构补偿机制,今天必须部署
  • 2026年侧压窗公司最新推荐排行榜 - 品牌策略师
  • VMware虚拟机UEFI模式下U盘引导安装Win10全攻略
  • 牛客网 2026 最新 1100道 Java 面试题来袭,面面俱到,太全了
  • Pixel Aurora Engine实战教程:构建像素艺术风格Prompt模板库
  • 解读旅游景区策划研究院、机构、公司的优势,哪家值得推荐? - myqiye
  • 数学建模论文的复现与排版难题,爱毕业(aibiye)用AI轻松解决
  • 抖音直播录制工具终极指南:如何轻松录制40+平台直播内容