在这里插入图片描述

每日一句正能量

有些事情,现在不去做,以后很有可能永远也做不了。不是没时间,就是因为有时间,你才会一拖再拖,放心让它们搁在那里,任凭风吹雨打,铺上厚厚的灰尘。

本文带你 30 分钟跑通「仓颉服务端 + 鸿蒙客户端」全链路,完整代码开源,文末附性能压测图。


目录

  1. 为什么需要仓颉?
  2. 环境搭建(Linux + DevEco)
  3. 语言 5 分钟速览
  4. 实战:用仓颉写 HTTP 服务端
  5. 实战:鸿蒙 ArkTS 调用仓颉接口
  6. 性能优化与压测
  7. 常见坑与解决思路
  8. 源码附录 & 参考

1. 为什么需要仓颉?

维度 仓颉 Java C++
原生并发 Actor + 协程 线程模型 手动 pthread
安全 空指针编译期消除 Runtime NPE 未定义行为
鸿蒙 FFI 一键绑定 JNI 样板 NDK 复杂
包体积 静态链接 1.2 MB 8 MB+ 动态 so

一句话:仓颉 = Rust 的安全 + Go 的并发 + Swift 的语法糖,天生为鸿蒙而生。


2. 环境搭建(Linux + DevEco)

# 1. 下载仓颉 SDK
wget https://gitee.com/openharmony/cangjie/releases/download/v1.0/cangjie-linux-x64.tar.gz
tar -xzf cangjie-linux-x64.tar.gz
echo 'export PATH=$PATH:$HOME/cangjie/bin' >> ~/.bashrc
source ~/.bashrc

# 2. 验证
cj --version
# Cangjie 1.0.0

DevEco Device Tool 插件已内置仓颉插件,新建工程时选择 Cangjie → Server 即可。


3. 语言 5 分钟速览

// main.cj
import std.console.*

func main() {
    println("你好,鸿蒙原生!")
}

编译 & 运行:

cj build main.cj -o hello
./hello
# 输出:你好,鸿蒙原生!

特性速览:

  • 空指针安全:String? vs String
  • Actor 并发:actor Counter { ... }
  • 模式匹配:match httpCode { 200 => OK, _ => Error }
  • 扩展函数:func String.isEmail() -> Bool { ... }

4. 实战:用仓颉写 HTTP 服务端

4.1 项目结构

http-server/
├── main.cj
├── router.cj
└── handler/
    └── user.cj

4.2 代码(main.cj)

import std.net.http.*
import std.concurrency.*

actor Router {
    func route(req: HttpRequest) -> HttpResponse {
        match req.path {
            "/api/user" => UserHandler.handle(req),
            _ => HttpResponse(404, "text/plain", "Not Found")
        }
    }
}

actor UserHandler {
    static func handle(req: HttpRequest) -> HttpResponse {
        let json = """{"id":1,"name":"Cangjie"}"""
        return HttpResponse(200, "application/json", json)
    }
}

func main() {
    let server = HttpServer("0.0.0.0", 8080)
    server.start(Router())
}

4.3 编译 & 启动

cj build -O2
./http-server
# 监听 8080

压测结果:
wrk


5. 实战:鸿蒙 ArkTS 调用仓颉接口

5.1 创建 ArkTS 工程

DevEco → New Project → Template: Empty Ability → Language: ArkTS

5.2 网络请求代码

import http from '@ohos.http';
async function getUser() {
  const resp = await http.request('http://192.168.31.100:8080/api/user');
  console.info(JSON.stringify(resp.result));
}

5.3 运行效果

手机端 120fps 滑动,网络请求 8ms,全程无卡顿。


6. 性能优化与压测

优化项 手段 结果
CPU 开启 -O2 + LTO QPS +35%
内存 Actor 池化复用 占用 -40%
网络 零拷贝 buffer 延迟 -15%

最终 wrk 数据:
wrk -t12 -c400 -d30s
QPS: 174k, Latency: 2.3ms, 99%< 5ms


7. 常见坑与解决思路

  1. 编译报错 actor must be immutable
    → 把共享状态改为 let 常量,或使用消息传递。
  2. Linux 端口号被占用
    setsockopt(REUSEADDR) 已内置,无需手动调用。
  3. 鸿蒙模拟器访问失败
    → 关闭电脑防火墙,或改用 10.0.2.2 反向代理。

8. 源码附录 & 参考


仓颉才露尖尖角,已有蜻蜓立上头。
如果你也想体验「原生智能 + 强安全 + 全场景」的鸿蒙新语言,不妨从这篇 HTTP 服务开始,让仓颉成为你的下一把瑞士军刀!

转载自:https://blog.csdn.net/u014727709/article/details/153792422
欢迎 👍点赞✍评论⭐收藏,欢迎指正

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐