Skip to content

仓颉版的WebSocket实现,提供给ArkTS使用,解决ArkTS提供的 API12-API17下 WebSocket下 buffer和string混合传递,类型错乱的问题,解决on("Message")下payload大小为0 导致message为undefined的情况

License

Notifications You must be signed in to change notification settings

MoonlitDropOfBlood/websocket

Repository files navigation

WebSocketClient Library for OpenHarmony

简介

openHarmony

WebSocketClient是一个为OpenHarmony开发的WebSocket客户端库,提供简单易用的API来建立WebSocket连接、发送和接收消息。

  • 支持WebSocket客户端连接
  • 支持文本和二进制数据传输
  • 支持事件监听和处理
  • C++的WebSocket实现,提供给ArkTS使用,解决ArkTS提供的 API12-API17下 WebSocket下 buffer和string混合传递,类型错乱的问题,
  • 解决on("Message")下payload大小为0 导致message为undefined的情况
  • 1.x.x 版本为仓颉实现,会持续维护

下载安装

ohpm install @duke/websocket-client

OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包

使用说明

基本用法

导入WebSocket库:

import { createWebSocket, WebSocketClient, WebSocketClientEvent } from '@duke/websocket-client';

创建WebSocket客户端实例:

const wsClient = createWebSocket();

连接到WebSocket服务器:

wsClient.connect("ws://your-websocket-server-url");

事件监听

可以监听以下事件:

连接打开事件:

wsClient.on("open", (event: WebSocketClientEvent) => {
  console.log("WebSocket连接已打开");
})

接收到文本消息:

wsClient.on("messageText", (data: string) => {
  console.log("收到文本消息:", data);
})

接收到二进制数据:

wsClient.on("messageBuffer", (data: ArrayBuffer) => {
  console.log("收到二进制消息,长度: " + data.byteLength);
})

连接关闭事件:

wsClient.on("close", (event: WebSocketClientEvent) => {
  console.log("WebSocket连接已关闭");
})

错误事件:

wsClient.on("error", (event: WebSocketClientEvent) => {
  console.log("WebSocket发生错误" + event.reason);
})

发送消息

发送文本消息:

wsClient.send("Hello, WebSocket!");

发送二进制数据:

const buffer = new ArrayBuffer(10);
wsClient.send(buffer);

关闭连接

wsClient.close();

移除事件监听

可以移除特定事件的监听器:

// 移除特定回调函数
wsClient.off("messageText", messageHandler)
// 移除所有回调函数
wsClient.off("messageText");

WebSocketClient

方法名 入参 接口描述
connect url: string | headers?: Record<string, string> 创建WebSocket实例,返回WebSocketClient实例
connect url: string | headers: Record<string, string> | callback: (error: string) => void 连接到指定URL的WebSocket服务器,通过回调处理结果
pingInterval interval: number 设置心跳间隔,单位毫秒,默认为40秒,为0,表示不发送心跳包,以连接后不能中途修改
send data: string | ArrayBuffer 发送文本或二进制数据,返回Promise
send data: string | ArrayBuffer, callback: (error: string) => void 发送文本或二进制数据,通过回调处理结果
close 关闭WebSocket连接,返回Promise
close callback: (error: string) => void 关闭WebSocket连接,通过回调处理结果
on event: string, callback: Function 注册事件监听器
off event: string, callback?: Function 移除事件监听器

事件类型

事件名 回调参数类型 描述
open WebSocketClientEvent 连接成功打开时触发
messageText string 收到文本消息时触发
messageBuffer ArrayBuffer 收到二进制消息时触发
close WebSocketClientEvent 连接关闭时触发
error WebSocketClientEvent 发生错误时触发

WebSocketClientEvent

属性名 类型 描述
code string 报错代码
reason string 原因描述

约束与限制

在下述版本验证通过:

DevEco Studio: 5.0.5.315, SDK: HarmonyOS 5.0.1 Release Ohos_sdk_public 5.0.1.115 (API Version 13 Release)

目录结构

|---- WebSocket
|     |---- AppScrope  # 示例代码文件夹
|     |---- entry  # 示例代码文件夹
|     |---- examples # 示例代码文件夹  
|     |---- library # WebSocketClient库仓颉版实现文件夹  
|           |---- build  # WebSocketClient模块打包后的文件
|           |---- index.ets  # 对外接口    
|     |---- TestServer # Node 测试 websocket服务端    
|     |---- websocket # WebSocketClient库C++版实现文件夹  
|           |---- build  # WebSocketClient模块打包后的文件
|           |---- index.ets  # 对外接口     
|     |---- README.md  # 安装使用方法
|     |---- CHANGELOG.md  # 更新日志

贡献代码

使用过程中发现任何问题都可以提 Issue 给我,当然,我也非常欢迎你给我发 PR

开源协议

本项目基于 MIT license ,请自由地享受和参与开源。

其他库

About

仓颉版的WebSocket实现,提供给ArkTS使用,解决ArkTS提供的 API12-API17下 WebSocket下 buffer和string混合传递,类型错乱的问题,解决on("Message")下payload大小为0 导致message为undefined的情况

Resources

License

Stars

Watchers

Forks

Packages

No packages published