鸿蒙WebSocket的使用竟如此简单

news/2025/3/13 12:26:44/文章来源:https://www.cnblogs.com/zhaloe/p/18769663

使用WebSocket建立服务器与客户端的双向连接,需要先通过createWebSocket()方法创建WebSocket对象,然后通过connect()方法连接到服务器。当连接成功后,客户端会收到open事件的回调,之后客户端就可以通过send()方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到message事件的回调。当客户端不要此连接时,可以通过调用close()方法主动断开连接,之后客户端会收到close事件的回调。

若在上述任一过程中发生错误,客户端会收到error事件的回调。

websocket支持心跳检测机制,在客户端和服务端建立WebSocket连接之后,每间隔一段时间会客户端会发送Ping帧给服务器,服务器收到后应立即回复Pong帧。

接口说明

WebSocket连接功能主要由webSocket模块提供。使用该功能需要申请ohos.permission.INTERNET权限。具体接口说明如下

  • createWebSocket():创建一个WebSocket连接
  • connect():根据URL地址,建立一个WebSocket连接
  • send():通过WebSocket连接发送数据
  • close():关闭WebSocket连接
  • on(type: 'open'):订阅WebSocket的打开事件
  • off(type: 'open'):取消订阅WebSocket的打开事件
  • on(type: 'message'):订阅WebSocket的接收到服务器消息事件
  • off(type: 'message'):取消订阅WebSocket的接收到服务器消息事件
  • on(type: 'close'):订阅WebSocket的关闭事件
  • off(type: 'close'):取消订阅WebSocket的关闭事件
  • on(type: 'error'):订阅WebSocket的Error事件
  • off(type: 'error'):取消订阅WebSocket的Error事件

开发步骤

  1. 导入需要的webSocket模块
  2. 创建一个WebSocket连接,返回一个WebSocket对象
  3. (可选)订阅WebSocket的打开、消息接收、关闭、Error事件
  4. 根据URL地址,发起WebSocket连接
  5. 使用完WebSocket连接之后,主动断开连接

示例代码

import { webSocket } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';let defaultIpAddress = "ws://";
let ws = webSocket.createWebSocket();
ws.on('open', (err: BusinessError, value: Object) => {console.log("on open, status:" + JSON.stringify(value));// 当收到on('open')事件时,可以通过send()方法与服务器进行通信ws.send("Hello, server!", (err: BusinessError, value: boolean) => {if (!err) {console.log("Message send successfully");} else {console.log("Failed to send the message. Err:" + JSON.stringify(err));}});
});
ws.on('message', (err: BusinessError, value: string | ArrayBuffer) => {console.log("on message, message:" + value);// 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接if (value === 'bye') {ws.close((err: BusinessError, value: boolean) => {if (!err) {console.log("Connection closed successfully");} else {console.log("Failed to close the connection. Err: " + JSON.stringify(err));}});}
});
ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {console.log("on close, code is " + value.code + ", reason is " + value.reason);
});
ws.on('error', (err: BusinessError) => {console.log("on error, error:" + JSON.stringify(err));
});
ws.connect(defaultIpAddress, (err: BusinessError, value: boolean) => {if (!err) {console.log("Connected successfully");} else {console.log("Connection failed. Err:" + JSON.stringify(err));}
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/898106.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gdb调试汇编

首先是函数传参, 先说下edi esi edx ecx 和 rdi rsi rdx rcx的关系 正常的centos x86的架构, 函数的前6个参数一般是用着几个寄存器存储的 edi esi edx ecx r8 r9(也可能是rdi rsi rdx rcx r8 r9),从左依次往右 第7个参数以后,就放在栈上了,也就是通过栈传递,每个参数…

【每日一题】20250313

【每日一题】如图所示,足够长平行金属导轨倾斜放置,倾角为 \(37^{\circ}\),宽度为 \(0.5 \; \mathrm{m}\),电阻忽略不计,其上端接一小灯泡,电阻为 \(1 \; \Omega\).一导体棒 \(MN\) 垂直于导轨放置,质量为 \(0.2 \; \mathrm{ kg }\),接入电路的电阻为 \(1 \; \Omega\)…

如何在VMWare Workstation中为桌面操作系统设置固定的显示分辨率

在虚拟中安装Linux操作系统后进入桌面环境后分辨率会自动拉伸变化,有时候可能不符合使用者的习惯,我们可以先关闭操作系统(必须先关闭操作系统否则不允许设置)然后鼠标右键点击已经安装的操作系统打开设置界面。   在系统设置界面中的《硬件》选项卡中选择点击《显示器》…

ABB IRB6660机器人伺服电机维修

常见故障及原因1. 电机故障 - 过载:当负载超过额定电机负载时触发,例如在搬运超过机器人承载能力的重物时,可能会导致电机过载。 - 高温:长时间运行或散热不良会使电机温度升高,如散热风扇损坏或者工作环境温度过高。 - 绝缘老化:随着使用时间增长,电机的绝缘材料…

四代固态纳米孔测序芯片/Flowcell加工工艺

固态纳米孔测序芯片是一种基于固态材料(如氮化硅、二氧化硅、石墨烯等)制备的纳米孔器件,用于单分子检测(如DNA、RNA、蛋白质等)。其加工工艺涉及微纳制造技术、材料科学和生物工程的交叉领域。以下是其核心加工工艺及关键步骤: 固态纳米孔测序芯片是一种基于固态材料(如…

SNeP1.1 Segmentation fault (core dumped) 段错误

001、问题 002、问题原因:ped文件用tab分割[b20223040323@admin2 test5]$ ls outcome.map outcome.ped step1.slurm [b20223040323@admin2 test5]$ head outcome.ped | cut -f 1-8 GMM1 GMM1 0 0 0 -9 A G G C GMM2 GMM2 0 …

[I.2][个人作业 软件案例分析]

[I.2]个人作业 软件案例分析 我选择QQ音乐作为调研目标 第一部分 软件调研评测 软件使用的图片软件分析使用QQ音乐主要有三种方式,一种是已知目标音乐在搜索框中直接输入进行搜索,第二种是目标音乐在播放但是不知道名字,可以使用听歌识曲的功能,第三种是可以选择根据风格进…

浅谈右值引用 LeetCode题集-6 - Z 字形变换,窥探模板元编程的一角

合集 - 经验分享(56)1.记一次由于操作失误致使数据库瘫痪的故障分析与解决方案2023-09-082.网络之谜:记一次失败排查的故事2023-11-153.你是否想知道如何应对高并发?Go语言为你提供了答案!2023-12-294.2023年终总结:拉帮结伙,拼搏探索新机遇2023-12-305.谁说后端不能画出美…

库卡机器人维修KSS26045硬件错误

库卡机器人在使用过程中,可能会遇到常见的KSS26045硬件故障,这些机器人故障大致可以归结为以下几种类型:先是电源故障。一旦电源系统出现问题,库卡机器人可能会面临无法启动或无法维持正常运行的困境。为了诊断电源故障,可以利用万用表等专业工具来精确测量电源的输出电压…

mac 使用Homebrew安装ADB

Homebrew是Mac上的包管理器,可以方便地安装和管理各种开源软件。如果还没有安装Homebrew,需要先安装Homebrew 1、安装Homebrew 为了解决下载速度慢的问题,直接用清华大学镜像: /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh…

自适应前照灯系统AFS

自适应前照灯系统是一种智能灯光调节系统。通过感知驾驶员操作、车辆行驶状态、路面变化以及天气环境等信息,AFS 自动控制前照灯实时进行上下、左右照明角度的调整,为驾驶员提供良好的道路照明效果。 自适应前照灯系统(Adaptive Front-lighting System,简称AFS)是一…

DeepSeek R1 + ollama + ragflow 使用 docker 部署(Windows)

DeepSeek-R1本地部署配置要求 Github地址:https://github.com/deepseek-ai/DeepSeek-R1?tab=readme-ov-file模型规模最低 GPU 显存推荐 GPU 型号纯 CPU 内存需求适用场景1.5B 4GB RTX 3050 8GB 个人学习7B、8B 16GB RTX 4090 32GB 小型项目14B 24GB A5000 x2 64GB 专业应用32…