鸿蒙WebSocket的使用竟如此简单
使用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事件
开发步骤
- 导入需要的webSocket模块
- 创建一个WebSocket连接,返回一个WebSocket对象
- (可选)订阅WebSocket的打开、消息接收、关闭、Error事件
- 根据URL地址,发起WebSocket连接
- 使用完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));
}
});
鸿蒙WebSocket的使用竟如此简单的更多相关文章
- 使用 Tye 辅助开发 k8s 应用竟如此简单(一)
最近正巧在进行 Newbe.Claptrap 新版本的开发,其中使用到了 Tye 来辅助 k8s 应用的开发.该系列我们就来简单了解一下其用法. Newbe.Claptrap 是一个用于轻松应对并发问 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(二)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中使用服务发现. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次阅读本系 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(三)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何对数据库进行链接. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(四)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中如何进行日志的统一管理. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如果您是首次 ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...
- 网络游戏开发-服务器(01)Asp.Net Core中的websocket,并封装一个简单的中间件
先拉开MSDN的文档,大致读一遍 (https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/websockets) WebSocket 是一 ...
- spring websocket集群问题的简单记录
目录 前言 解决方案 代码示例 前言 最近公司里遇到一个问题,在集群中一些websocket的消息丢失了. 产生问题的原理很简单,发送消息的服务和接收者连接的服务不是同一个服务. 解决方案 用中间件( ...
- websocket+node建立聊天室简单使用
1.建立新的文件夹dome 2.执行 npm init加载package.json文件 3.node不支持websocket所以npm install ws 下载 ws插件 4.建立index.ht ...
- 原来DataTable的Distinct竟如此简单!
DataView可以帮我们直接获取Distinct数据, DataTable dataTable;DataView dataView = dataTable.DefaultView; DataTabl ...
随机推荐
- Windows 11 下 Virtualbox 6.1.34 出现 End kernel panic - not syncing: attempted to kill the idle task
前言小半年没用 Virtualbox 了,切换到了 VMware,今天又切换回去(无聊),但是安装虚拟机出现这个错误. 解决方法根据 Virtualbox 论坛的讨论[1]和[2],首先明确 系统必须 ...
- .NET周刊【12月第3期 2024-12-15】
国内文章 重磅推出 Sdcb Chats:一个全新的开源大语言模型前端 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro Sdcb Ch ...
- Qt编写的modbus模拟器/支持网络和串口以及websocket/支持网络rtu
一.使用说明 1.1 设备模拟-Com 第一步,填写要模拟的设备地址,0表示自动处理,也就是收到什么地址就应答什么地址. 第二步,填写对应的串口号和波特率. 第三步,单击打开串口,成功后会变成关闭串口 ...
- Qt/C++推流程序自动生成网页远程查看实时视频流(视频文件/视频流/摄像头/桌面转成流媒体rtmp+hls+webrtc)
一.前言说明 推流程序将视频流推送到流媒体服务器后,此时就等待验证拉流播放,一般可以选择ffplay命令行播放或者vlc等播放器打开播放,也可以选择网页直接打开拉流地址播放,一般主流的浏览器都支持网页 ...
- 关于Qt程序中动态和静态的几点总结
在Qt程序中,分动态库版本的Qt和静态库版本的Qt. 官方默认提供的二进制包就是动态库版本的Qt,如果自行编译则编译的时候对应参数 -shared. 静态库版本的Qt需要自行编译,编译的时候对应参数 ...
- [转]idea2021.1破解版 附安装教程免激活码
参看链接:http://www.ddooo.com/softdown/190256.htm 百度网盘地址:https://pan.baidu.com/share/init?surl=qwywmPK-F ...
- 开源即时通讯IM框架MobileIMSDK的微信小程序端开发快速入门
一.理论知识准备 您需要对微信小程序开发有所了解: 1)真正零基础入门学习笔记系列 2)从零开始的微信小程序入门教程 3)最全教程:微信小程序开发入门详解 您需要对WebSocket技术有所了解: 1 ...
- Java中使用JFreeChart生成甘特图
引言 甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配.它通过条形图显示任务的开始和结束时间,使项目经理能够直观地了解项目的整体情况.在Java开发中,JFreeChart是一个强大的开源 ...
- Ubuntu 添加多用户和Samba
USERNAME="$1" SMBFILE="/etc/samba/smb.conf" if [ $# != 1 ] then echo "使用方: ...
- biancheng-NumPy教程
目录http://c.biancheng.net/numpy/ 1NumPy是什么2NumPy下载与安装3NumPy ndarray对象4NumPy数据类型5NumPy数组属性6Numpy创建数组7N ...