HarmonyOS鸿蒙Next中建立本地http服务器和websocket服务器有三方库吗?

HarmonyOS鸿蒙Next中建立本地http服务器和websocket服务器有三方库吗?

如果没有三方库 有没有文档啥的

10 回复

开发者你好,目前webSocketServer服务端仅支持智慧屏(server端完整示例),不过可以看下下面方案:

  1. 可以通过 TCP Socket Server 替代。
    参考链接:
    应用通过 TCP Socket Server 进行数据传输

  2. 另外可以使用websocketpp三方库实现。

更多关于HarmonyOS鸿蒙Next中建立本地http服务器和websocket服务器有三方库吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


目前没有三方库,可参考这demo进行https://www.cnblogs.com/zhaoylhm/p/18943068

目前没有三方库的。可通过ArkTS调用Native层封装的服务端实现,但开发复杂度较高。假如通过C++层使用net_websocket.h接口实现Native服务端行不行?当然应该得搭配ArkTS层调用

// C++层服务端实现片段

OH_WebSocketClient_Constructor(onOpenCallback, onMessageCallback, ...);

OH_WebSocketClient_AddHeader(client, header);

你有做过类的的吗,

【背景知识】 WebSocket主要用于建立服务器与客户端之间的双向通信通道,实时聊天、在线协作等场景中,WebSocket的优势在于它可以减少延迟,提高数据传输的速度和效率,非常适合需要频繁更新数据的场景。

【解决方案】 WebSocket使用步骤:

  1. 需要先通过createWebSocket方法创建WebSocket对象,然后通过connect方法连接到服务器。
  2. 当连接成功后,客户端会收到open()事件的回调,之后客户端就可以通过send()方法与服务器进行通信。
  3. 当服务器发信息给客户端时,客户端会收到on(‘message’)事件的回调。
  4. 当客户端不要此连接时,可以通过调用close()方法主动断开连接,之后客户端会收到close()事件的回调。
    若在上述任一过程中发生错误,客户端会收到on(‘error’)事件的回调。

客户端代码示例:

import webSocket from '@ohos.net.webSocket';
import { BusinessError } from '@ohos.base';

@Entry
@Component
struct webSock {
  ws: webSocket.WebSocket = webSocket.createWebSocket();
  defaultIpAddress = "ws://"; // 对应的Ip地址

  aboutToAppear(): void {
    this.ws.on('open', (err: BusinessError, value: Object) => {
      if (err != undefined) {
        console.error(`${err}`);
        return;
      }
      // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
      this.ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
        if (!err) {
          console.info("send success");
        } else {
          console.error(`send fail, err:${err}`);
        }
      });
    });
    this.ws.on('message', (error: BusinessError, value: string | ArrayBuffer) => {
      console.info("on message, message:" + value);
      // 当收到服务器的bye消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
      if (value === 'bye') {
        this.ws.close((err: BusinessError, value: boolean) => {
          if (!err) {
            console.info("close success");
          } else {
            console.error(`close fail, err is ${err}`);
          }
        });
      }
    })
    this.ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
      console.info("on close, code is " + value.code + ", reason is " + value.reason);
    })
    this.ws.on('error', (err: BusinessError) => {
      console.error(`on error, error:  ${err}`);
    })
    this.ws.connect(this.defaultIpAddress, (err: BusinessError, value: boolean) => {
      if (!err) {
        console.info("connect success");
      } else {
        console.error(`connect fail, err:${err}`);
      }
    })
  }

  build() {
    Button('发消息').onClick(() => {
      this.ws.send("我发个消息")
    })
  }
}

服务端代码示例:

var ws = require("nodejs-websocket")
// 创建一个服务server,每次用户链接,函数就会被执行,并给当前用户创建一个connect对象
var server = ws.createServer(connect => {
  // 每当接收到用户传递过来的数据,就会触发text事件,并传入数据
  connect.on("text", data => {
    // 给用户响应数据
    // connect.sendText(data.toUpperCase()+"!!!") //转换大小写并并拼接字符串
    connect.send(data)
    console.info(data)
  })
  // 监听websocket断开链接
  connect.on("close", () => {
    console.info("websocket连接断开....")
  })
  // 监听websocket异常信息
  connect.on("error", () => {
    console.info("websocket连接异常....")
  })
})

server.listen(3000, () => {
  console.info("websocket running")
})

本地部署http服务:

【解决方案】 HarmonyOS目前没有httpserver的API,推荐使用三方库如@webabcd/harmony-httpserver部署本地http服务器。使用文档及代码示例见链接[@webabcd/harmony-httpserver](https://ohpm.openharmony.cn/#/cn/detail/@webabcd%2Fharmony-httpserver)。

用不了哥,

你好,是哪个用不了啊,websocket服务端吗,

服务端代码示例:

在HarmonyOS Next中,可以使用内置的@ohos.net.http@ohos.net.socket模块来创建本地HTTP服务器和WebSocket服务器,无需依赖第三方库。@ohos.net.http提供HTTP服务端能力,支持请求处理和响应返回;@ohos.net.socket支持WebSocket服务端实现,处理双向通信。两者均为ArkTS开发,符合HarmonyOS应用开发规范。

目前HarmonyOS Next暂未提供专门用于构建本地HTTP服务器和WebSocket服务器的第三方库。华为官方文档中推荐使用ArkTS/ArkUI原生能力结合网络API实现相关功能,具体可参考以下路径:

  1. HTTP服务器:可通过@ohos.net.socket模块创建TCP Socket,在此基础上实现HTTP协议解析与响应。示例代码见网络连接管理开发指南

  2. WebSocket服务器:需基于TCP Socket自主实现WebSocket握手(RFC6455)及数据帧解析。官方提供了WebSocket客户端示例,服务端逻辑需参照协议规范自行实现。

建议关注ArkTS API参考中的网络相关接口,现阶段需通过底层socket能力定制开发。

回到顶部