一、实训概述

传统 TCP Socket 通信需要手动管理端口、连接并发、粘包处理,学习成本高且环境适配麻烦。本次实训使用华为开发者空间提供的鲲鹏 Ubuntu 云桌面作为统一开发环境,依托云函数 SDK 内置的callFunction能力,实现同环境下两个云函数内网互通,模拟微服务之间的业务调用场景。

整个项目分为调用端caller、服务处理端target,所有代码编写、npm 依赖安装、调试均在云端完成,无需本地安装 Node、编辑器,标准化 ARM 鲲鹏环境规避系统兼容问题,非常适合网络通信课程实训。

二、云端开发环境介绍

2.1 华为开发者空间云桌面配置

  • 处理器:鲲鹏 ARM 架构
  • 硬件规格:4 核 CPU / 8G 内存
  • 系统:Ubuntu Linux
  • 内置工具:文件管理器、CodeArts 代码编辑器、终端、npm/Node.js 预装
  • 核心优势:免费云端算力,环境统一,代码实时预览,支持直接打包上传云函数控制台

2.2 项目目录结构

云桌面终端创建两个独立项目文件夹,完全隔离调用方与服务方代码:

/home/developer
├─ caller    # 发起调用的客户端函数
└─ target    # 接收数据、处理业务的服务端函数

2.3 项目初始化流程

刚创建文件夹时缺少package.json,执行 npm 命令会报enoent文件缺失错误,修复步骤:

  1. 分别进入两个目录,初始化项目配置
cd /home/developer/target
npm init -y

cd /home/developer/caller
npm init -y
  1. 云函数依赖安装(两个目录都要执行)
npm install wx-server-sdk

三、完整业务代码实现

3.1 服务端函数 target/index.js

作为被调用的通信服务,自动接收调用方传入的全部数据,附加当前系统时间后返回应答。

const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

exports.main = async (event) => {
    // event 参数自动接收 caller 传递的测试报文
    return {
        code: 0,
        msg: "服务端接收数据成功",
        receiveMsg: event,
        serverTime: new Date().toLocaleString()
    }
}

3.2 调用端函数 caller/index.js

主动发起内网通信请求,封装测试业务数据调用 target,接收返回结果后统一输出。

const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })

exports.main = async (event) => {
    console.log("启动内网跨函数通信调用")
    // 服务通信核心API:内网无公网转发,低延迟高安全
    const res = await cloud.callFunction({
        name: "target",
        data: {
            username: "测试用户",
            userid: 1001,
            content: "云函数跨服务通信测试报文"
        }
    })
    return {
        code: 0,
        msg: "调用流程结束",
        serviceReturn: res.result
    }
}

四、云端开发 & 云函数部署步骤

  1. 鲲鹏云桌面代码编写 打开远程 Ubuntu 桌面,使用内置 CodeArts 编辑器分别打开callertargetindex.js,粘贴上述代码;底部终端执行初始化与依赖安装命令,完成本地项目构建。
  2. 华为云函数控制台部署 1)先部署target服务函数:新建同名云函数,上传 target 目录全部文件(含 node_modules),点击部署; 2)再部署caller调用函数:新建 caller 函数,上传完整项目包并部署; 3)点击 caller 页面「测试」按钮,一键触发完整通信流程,查看返回报文。

五、跨函数通信核心原理

  1. 内网传输链路 callFunction使用云厂商内网通道传输数据,不走公网,延迟更低、数据不会暴露在公网,安全性更高。
  2. 数据透传机制 调用时传入的data对象会完整赋值给 target 入口的event参数,实现两端无缝数据交互。
  3. 异步同步等待 通过async/await阻塞等待下游服务执行完毕,拿到完整返回数据后再向上返回结果,适配常规同步业务场景。
  4. 微服务解耦思想 两个函数职责完全拆分,target 只负责数据接收与业务处理,caller 只负责发起请求、汇总返回数据,可无限拓展多服务链式调用。

六、测试返回结果示例

执行 caller 测试后,控制台输出完整 JSON 响应:

{
  "code": 0,
  "msg": "调用流程结束",
  "serviceReturn": {
    "code": 0,
    "msg": "服务端接收数据成功",
    "receiveMsg": {
      "username": "测试用户",
      "userid": 1001,
      "content": "云函数跨服务通信测试报文"
    },
    "serverTime": "2026/7/10 19:56:08"
  }
}

从结果可以看出:两端通信链路通畅,业务数据完整传递,服务端成功返回接收时间戳,通信功能验证通过。

七、实训踩坑问题汇总

  1. npm enoent 报错 原因:文件夹缺少 package.json;解决:执行npm init -y生成配置文件。
  2. 提示目标函数不存在 原因:target 未部署,或代码内函数名拼写错误;解决:核对name:"target"与控制台函数名完全一致,重新部署服务端代码。
  3. 找不到 wx-server-sdk 模块 原因:未安装依赖,打包时缺失 node_modules;解决:执行npm install wx-server-sdk,打包上传时携带依赖文件夹。

八、功能拓展优化方向

  1. 增加异常捕获:使用 try/catch 包裹 callFunction 调用,捕获超时、函数不存在、执行异常等错误,自定义错误码返回;
  2. 增加调用鉴权:传递 token 参数,target 校验身份后再处理数据,实现服务访问权限控制;
  3. 并发多服务调用:使用 Promise.all 并行调用多个下游函数,实现多微服务数据聚合;
  4. 全链路日志:对接华为云日志服务,记录每次通信入参、返回值、执行耗时,方便线上排查。
Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐