近期我在公司开发Linux盒子上的web应用时使用了cpp-httplib库。某天灵光一闪,鸿蒙应用生态下的httpserver库几乎没有,而某些特定场景下,如门禁机,工业平板等确实也需要,这可能就会要求开发应用的朋友得会C++,因为上层arkts不适合干这个事,并且即使干了也是重复造轮子,并且必须得非常懂http协议栈。然后我就萌生了个念头,基于cpp-httplib去封装一层napi供上层arkts使用,至于为什么不用ai去做,至少我实际用过,qoder,trae,包括华为devstudio自己的ai等工具,对鸿蒙生成的代码很多都不准确,所以就手撸一个吧!

先看使用例子:

import * as httpServer from 'harmonyhttpserver';
import { ServerEvent } from 'harmonyhttpserver';

// 1. 创建服务实例
const server = httpServer.createServer();

// 2. 注册事件监听
server.addServerListener((event, reason) => {
  console.info(`ServerEvent: ${event}, reason: ${reason}`);
});

// 3. 注册路由
server.addRouterGet("/hello", (req, res) => {
    res.setStatus(200);
    res.setContent(JSON.stringify({ message: "Hello HarmonyOS!" }), "application/json");
  })
  .addRouterPost("/echo", (req, res) => {
    const body = req.getBody();
    const text = body ? new util.TextDecoder().decodeToString(new Uint8Array(body)) : "";
    res.setStatus(200);
    res.setContent(text, "text/plain");
  });

// 4. 启动监听
server.listen("0.0.0.0", 8080);

就这么简单,就能在鸿蒙下搭建http服务了!不过需要注意的是,一旦屏幕关闭,服务会自动断开了,所以实际使用的时候要考虑亮屏自动重连的逻辑。还有一点,不需要关注线程,C++端已经开过了,上层arkts不需要写在taskpool,worker线程中,直接主线程开干就OK!

项目代码中我也写了个带界面的Test,大家有兴趣的话可以下载下来Run一把感觉一下,测试工具可以用apifox,postman等。目前项目我已打包成har发送到openharmony三方库上了,正在审核中~

程序可以跑在模拟器中,但它的网络会有点绕,所以需要用命令配置下,需要做个映射。

hdc fport tcp:21005 tcp:21000
执行完之后 你代码中监听的是21000端口,那么在PC上就使用21005端口

源码地址:AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

如果对你有帮助,欢迎 Star、Fork、提 Issue,一起完善鸿蒙生态的 HttpServer 方案

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐