仓颉语言第一课:从 HelloWorld 到鸿蒙原生 HTTP 服务

文章目录

    • 每日一句正能量
    • 目录
    • [1. 为什么需要仓颉?](#1. 为什么需要仓颉?)
    • [2. 环境搭建(Linux + DevEco)](#2. 环境搭建(Linux + DevEco))
    • [3. 语言 5 分钟速览](#3. 语言 5 分钟速览)
    • [4. 实战:用仓颉写 HTTP 服务端](#4. 实战:用仓颉写 HTTP 服务端)
      • [4.1 项目结构](#4.1 项目结构)
      • [4.2 代码(main.cj)](#4.2 代码(main.cj))
      • [4.3 编译 & 启动](#4.3 编译 & 启动)
    • [5. 实战:鸿蒙 ArkTS 调用仓颉接口](#5. 实战:鸿蒙 ArkTS 调用仓颉接口)
      • [5.1 创建 ArkTS 工程](#5.1 创建 ArkTS 工程)
      • [5.2 网络请求代码](#5.2 网络请求代码)
      • [5.3 运行效果](#5.3 运行效果)
    • [6. 性能优化与压测](#6. 性能优化与压测)
    • [7. 常见坑与解决思路](#7. 常见坑与解决思路)
    • [8. 源码附录 & 参考](#8. 源码附录 & 参考)

每日一句正能量

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

bash 复制代码
# 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 分钟速览

cangjie 复制代码
// main.cj
import std.console.*

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

编译 & 运行:

bash 复制代码
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)

cangjie 复制代码
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 编译 & 启动

bash 复制代码
cj build -O2
./http-server
# 监听 8080

压测结果:


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

5.1 创建 ArkTS 工程

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

5.2 网络请求代码

ts 复制代码
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

欢迎 👍点赞✍评论⭐收藏,欢迎指正

相关推荐
学传打活5 天前
【边打字.边学昆仑正义文化】_进阶篇5 宇宙星系的运转(续1)
微信公众平台·1024程序员节·汉字·昆仑正义文化
fangzhanpeng16813 天前
快速掌握C#语言基础知识点(1.基础数据类型)
开发语言·c#·1024程序员节
无己心15 天前
面向多平台 AI 搜索引擎的适配层架构设计
前端·人工智能·搜索引擎·ai·1024程序员节
u01030552721 天前
AI驱动的安卓UI自动生成功能实现
人工智能·1024程序员节
u01030552721 天前
长株潭智能体赋能腾讯元器链接共享
1024程序员节
云贝贝贝23 天前
OceanBase认证体系介绍与备考指南
运维·服务器·oceanbase·1024程序员节
u01030552723 天前
Java图像处理实战指南
人工智能·1024程序员节
u01030552723 天前
Java AWT鼠标事件全解析
人工智能·1024程序员节
u0103055271 个月前
Java实用类应用精讲
人工智能·1024程序员节
u0103055271 个月前
Java I/O核心操作实战
人工智能·1024程序员节