首页 > 编程笔记 > 通用技能 阅读:5

鸿蒙websocket连接的用法(附带实例)

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

当服务器发信息给客户端时,客户端会收到 message 事件的回调。当客户端不再需要此连接时,可以通过调用 close() 方法主动断开连接,之后客户端会收到 close 事件的回调。

若在上述任一过程中发生错误,客户端会收到 error 事件的回调。WebSocket 支持心跳检测机制,在客户端和服务端建立 WebSocket 连接之后,每间隔一段时间客户端会发送 Ping 帧给服务器,服务器收到 Ping 帧后应立即回复 Pong 帧。

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

表:WebSocket 连接功能涉及的接口
接口名 说明
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 开发实现的示例代码如下:
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的使用

相关文章