鸿蒙websocket连接的用法(附带实例)
使用 WebSocket 建立服务器与客户端的双向连接,需要先通过 createWebSocket() 方法创建 WebSocket 对象,然后通过 connect() 方法连接到服务器。当连接成功后,客户端会收到 open 事件的回调,之后客户端就可以通过 send() 方法与服务器进行通信。
当服务器发信息给客户端时,客户端会收到 message 事件的回调。当客户端不再需要此连接时,可以通过调用 close() 方法主动断开连接,之后客户端会收到 close 事件的回调。
若在上述任一过程中发生错误,客户端会收到 error 事件的回调。WebSocket 支持心跳检测机制,在客户端和服务端建立 WebSocket 连接之后,每间隔一段时间客户端会发送 Ping 帧给服务器,服务器收到 Ping 帧后应立即回复 Pong 帧。
WebSocket 连接功能主要由 webSocket 模块提供。使用该功能需要申请 ohos.permission.INTERNET 权限,具体接口说明如下表所示。
WebSocket 开发实现的示例代码如下:

图 1 WebSocket的使用
当服务器发信息给客户端时,客户端会收到 message 事件的回调。当客户端不再需要此连接时,可以通过调用 close() 方法主动断开连接,之后客户端会收到 close 事件的回调。
若在上述任一过程中发生错误,客户端会收到 error 事件的回调。WebSocket 支持心跳检测机制,在客户端和服务端建立 WebSocket 连接之后,每间隔一段时间客户端会发送 Ping 帧给服务器,服务器收到 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 连接,返回一个 WebSocket 对象;
- 订阅 WebSocket 的打开、接收消息、关闭、Error 事件;
- 根据 URL 地址,发起 WebSocket 连接;
- 使用完 WebSocket 连接之后,主动断开连接。
WebSocket 开发实现的示例代码如下:
import { webSocket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServiceKit'; let defaultIpAddress = "ws://"; let ws = webSocket.createWebSocket(); // 监听打开连接 ws.on('open', (err: BusinessError, value: Object) => { console.log("打开连接:" + JSON.stringify(value)); // 当收到 on('open') 事件时,可以通过 send() 方法与服务器进行通信 ws.send("你好, 服务器", (err: BusinessError, value: boolean) => { if (!err) { console.log("消息发送成功"); } else { console.log("消息发送失败: " + JSON.stringify(err)); } }); }); // 监听接收消息 ws.on('message', (err: BusinessError, value: string | ArrayBuffer) => { console.log("接收消息: " + value); // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接 if (value === 'bye') { ws.close((err: BusinessError, value: boolean) => { if (!err) { console.log("断开成功"); } else { console.log("断开失败 " + JSON.stringify(err)); } }); } }); // 监听关闭事件 ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => { console.log("关闭 " + value.code + ", 原因:" + value.reason); }); ws.on('error', (err: BusinessError) => { console.log("错误: " + JSON.stringify(err)); }); @Entry @Component struct Demo0301 { // 记录发送的消息 @State msg:string="" build() { Column() { Button("连接 WebSocket").width("90%").height(50).margin(10). onClick(()=>{ // 连接 ws.connect(defaultIpAddress, (err: BusinessError, value: boolean) => { if (!err) { console.log("连接成功"); } else { console.log("连接失败. 错误信息:" + JSON.stringify(err)); } }); }) Row() { TextInput({placeholder:"请输入要发送的信息"},text:this.msg).width("60%").height(50).margin(10) Button("发送消息").height(50).margin(10). onClick(()=>{ // 发送 ws.send(this.msg) }) } Button("关闭 WebSocket").width("90%").height(50).margin(10). onClick(()=>{ // 关闭 ws.close() }) }.width("100%") } }运行效果如下图所示:

图 1 WebSocket的使用