0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開發(fā)網(wǎng)絡(luò)管理:ohos.net.webSocket WebSocket連接

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-06-19 17:12 ? 次閱讀

WebSocket連接

說明: 本模塊首批接口從API version 6開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨(dú)標(biāo)記接口的起始版本。

使用WebSocket建立服務(wù)器與客戶端的雙向連接,需要先通過[createWebSocket]方法創(chuàng)建[WebSocket]對(duì)象,然后通過[connect]方法連接到服務(wù)器。當(dāng)連接成功后,客戶端會(huì)收到[open]事件的回調(diào),之后客戶端就可以通過[send]方法與服務(wù)器進(jìn)行通信。當(dāng)服務(wù)器發(fā)信息給客戶端時(shí),客戶端會(huì)收到[message]事件的回調(diào)。當(dāng)客戶端不要此連接時(shí),可以通過調(diào)用[close]方法主動(dòng)斷開連接,之后客戶端會(huì)收到[close]事件的回調(diào)。

若在上述任一過程中發(fā)生錯(cuò)誤,客戶端會(huì)收到[error]事件的回調(diào)。

導(dǎo)入模塊

import webSocket from '@ohos.net.webSocket';

完整示例

import webSocket from '@ohos.net.webSocket';

var defaultIpAddress = "ws://";
let ws = webSocket.createWebSocket();
ws.on('open', (err, value) = > {
    console.log("on open, status:" + value['status'] + ", message:" + value['message']);
    // 當(dāng)收到on('open')事件時(shí),可以通過send()方法與服務(wù)器進(jìn)行通信
    ws.send("Hello, server!", (err, value) = > {
        if (!err) {
            console.log("send success");
        } else {
            console.log("send fail, err:" + JSON.stringify(err));
        }
    });
});
ws.on('message', (err, value) = > {
    console.log("on message, message:" + value);
    // 當(dāng)收到服務(wù)器的`bye`消息時(shí)(此消息字段僅為示意,具體字段需要與服務(wù)器協(xié)商),主動(dòng)斷開連接
    if (value === 'bye') {
        ws.close((err, value) = > {
            if (!err) {
                console.log("close success");
            } else {
                console.log("close fail, err is " + JSON.stringify(err));
            }
        });
    }
});
ws.on('close', (err, value) = > {
    console.log("on close, code is " + value.code + ", reason is " + value.reason);
});
ws.on('error', (err) = > {
    console.log("on error, error:" + JSON.stringify(err));
});
ws.connect(defaultIpAddress, (err, value) = > {
    if (!err) {
        console.log("connect success");
    } else {
        console.log("connect fail, err:" + JSON.stringify(err));
    }
});

webSocket.createWebSocket

createWebSocket(): WebSocket

創(chuàng)建一個(gè)WebSocket,里面包括建立連接、關(guān)閉連接、發(fā)送數(shù)據(jù)和訂閱/取消訂閱WebSocket連接的打開事件、接收到服務(wù)器消息事件、關(guān)閉事件和錯(cuò)誤事件。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

返回值:

類型說明
[WebSocket]返回一個(gè)WebSocket對(duì)象,里面包括connect、send、close、on和off方法。

示例:

let ws = webSocket.createWebSocket();

WebSocket

在調(diào)用WebSocket的方法前,需要先通過[webSocket.createWebSocket]創(chuàng)建一個(gè)WebSocket。

connect

connect(url: string, callback: AsyncCallback): void

根據(jù)URL地址,建立一個(gè)WebSocket連接,使用callback方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù)

參數(shù)名類型必填說明
urlstring建立WebSocket連接的URL地址。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) = > {
	if (!err) {
		console.log("connect success");
	} else {
		console.log("connect fail, err:" + JSON.stringify(err))
	}
});

connect

connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback): void

根據(jù)URL地址和header,建立一個(gè)WebSocket連接,使用callback方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
urlstring建立WebSocket連接的URL地址。
optionsWebSocketRequestOptions參考[WebSocketRequestOptions]。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, {
	header: {
		"key": "value",
		"key2": "value2"
	}
}, (err, value) = > {
	if (!err) {
		console.log("connect success");
	} else {
		console.log("connect fail, err:" + JSON.stringify(err))
	}
});

connect

connect(url: string, options?: WebSocketRequestOptions): Promise

根據(jù)URL地址和header,建立一個(gè)WebSocket連接,使用Promise方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
urlstring建立WebSocket連接的URL地址。
optionsWebSocketRequestOptions參考[WebSocketRequestOptions]。

返回值:

類型說明
Promise以Promise形式返回建立連接的結(jié)果。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
let promise = ws.connect(url);
promise.then((value) = > {
	console.log("connect success")
}).catch((err) = > {
	console.log("connect fail, error:" + JSON.stringify(err))
});

send

send(data: string | ArrayBuffer, callback: AsyncCallback): void

通過WebSocket連接發(fā)送數(shù)據(jù),使用callback方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
datastringArrayBuffer 8+
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) = > {
	ws.send("Hello, server!", (err, value) = > {
		if (!err) {
			console.log("send success");
		} else {
			console.log("send fail, err:" + JSON.stringify(err))
		}
	});
});

send

send(data: string | ArrayBuffer): Promise

通過WebSocket連接發(fā)送數(shù)據(jù),使用Promise方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
datastringArrayBuffer 8+

返回值:

類型說明
Promise以Promise形式返回發(fā)送數(shù)據(jù)的結(jié)果。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) = > {
	let promise = ws.send("Hello, server!");
	promise.then((value) = > {
		console.log("send success")
	}).catch((err) = > {
		console.log("send fail, error:" + JSON.stringify(err))
	});
});

close

close(callback: AsyncCallback): void

關(guān)閉WebSocket連接,使用callback方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.close((err, value) = > {
	if (!err) {
		console.log("close success")
	} else {
		console.log("close fail, err is " + JSON.stringify(err))
	}
});

close

close(options: WebSocketCloseOptions, callback: AsyncCallback): void

根據(jù)可選參數(shù)code和reason,關(guān)閉WebSocket連接,使用callback方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
optionsWebSocketCloseOptions參考[WebSocketCloseOptions]。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
ws.close({
	code: 1000,
	reason: "your reason"
}, (err, value) = > {
	if (!err) {
		console.log("close success")
	} else {
		console.log("close fail, err is " + JSON.stringify(err))
	}
});

close

close(options?: WebSocketCloseOptions): Promise

根據(jù)可選參數(shù)code和reason,關(guān)閉WebSocket連接,使用Promise方式作為異步方法。

需要權(quán)限 :ohos.permission.INTERNET

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
optionsWebSocketCloseOptions參考[WebSocketCloseOptions]。

返回值:

類型說明
Promise以Promise形式返回關(guān)閉連接的結(jié)果。

示例:

let ws = webSocket.createWebSocket();
let url = "ws://"
let promise = ws.close({
	code: 1000,
	reason: "your reason"
});
promise.then((value) = > {
	console.log("close success")
}).catch((err) = > {
	console.log("close fail, err is " + JSON.stringify(err))
});

on('open')

on(type: 'open', callback: AsyncCallback ): void

訂閱WebSocket的打開事件,使用callback方式作為異步方法。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'open':WebSocket的打開事件。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.on('open', (err, value) = > {
	console.log("on open, status:" + value['status'] + ", message:" + value['message']);
});

off('open')

off(type: 'open', callback?: AsyncCallback ): void

取消訂閱WebSocket的打開事件,使用callback方式作為異步方法。

說明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'open':WebSocket的打開事件。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
let callback1 = (err, value) = > {
	console.log("on open, status:" + value['status'] + ", message:" + value['message']);
}
ws.on('open', callback1);
// 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱
ws.off('open', callback1);

on('message')

on(type: 'message', callback: AsyncCallback): void

訂閱WebSocket的接收到服務(wù)器消息事件,使用callback方式作為異步方法。

說明: AsyncCallback中的數(shù)據(jù)可以是字符串(API 6)或ArrayBuffer(API 8)。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'message':WebSocket的接收到服務(wù)器消息事件。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.on('message', (err, value) = > {
	console.log("on message, message:" + value);
});

off('message')

off(type: 'message', callback?: AsyncCallback): void

取消訂閱WebSocket的接收到服務(wù)器消息事件,使用callback方式作為異步方法。

說明: AsyncCallback中的數(shù)據(jù)可以是字符串(API 6)或ArrayBuffer(API 8)。 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'message':WebSocket的接收到服務(wù)器消息事件。
callbackAsyncCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.off('message');

on('close')

on(type: 'close', callback: AsyncCallback<{ code: number, reason: string }>): void

訂閱WebSocket的關(guān)閉事件,使用callback方式作為異步方法。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'close':WebSocket的關(guān)閉事件。
callbackAsyncCallback<{ code: number, reason: string }>回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.on('close', (err, value) = > {
	console.log("on close, code is " + value.code + ", reason is " + value.reason);
});

off('close')

off(type: 'close', callback?: AsyncCallback<{ code: number, reason: string }>): void

取消訂閱WebSocket的關(guān)閉事件,使用callback方式作為異步方法。

說明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'close':WebSocket的關(guān)閉事件。
callbackAsyncCallback<{ code: number, reason: string }>回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.off('close');

on('error')

on(type: 'error', callback: ErrorCallback): void

訂閱WebSocket的Error事件,使用callback方式作為異步方法。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'error':WebSocket的Error事件。
callbackErrorCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.on('error', (err) = > {
	console.log("on error, error:" + JSON.stringify(err))
});

off('error')

off(type: 'error', callback?: ErrorCallback): void

取消訂閱WebSocket的Error事件,使用callback方式作為異步方法。

說明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。

系統(tǒng)能力 :SystemCapability.Communication.NetStack

參數(shù):

參數(shù)名類型必填說明
typestring'error':WebSocket的Error事件。
callbackErrorCallback回調(diào)函數(shù)。

示例:

let ws = webSocket.createWebSocket();
ws.off('error');

WebSocketRequestOptions

建立WebSocket連接時(shí),可選參數(shù)的類型和說明。

系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。

參數(shù)名類型必填說明
headerObject建立WebSocket連接可選參數(shù),代表建立連接時(shí)攜帶的HTTP頭信息。參數(shù)內(nèi)容自定義,也可以不指定。

WebSocketCloseOptions

關(guān)閉WebSocket連接時(shí),可選參數(shù)的類型和說明。

系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。

參數(shù)名類型必填說明
codenumber錯(cuò)誤碼,關(guān)閉WebSocket連接時(shí)的可選參數(shù),可根據(jù)實(shí)際情況來填。默認(rèn)值為1000。
reasonstring原因值,關(guān)閉WebSocket連接時(shí)的可選參數(shù),可根據(jù)實(shí)際情況來填。默認(rèn)值為空字符串("")。

close錯(cuò)誤碼說明

發(fā)送給服務(wù)端的錯(cuò)誤碼可以自行定義,下面的列表僅供參考。

系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。

說明
1000正常關(guān)閉
1001服務(wù)器主動(dòng)關(guān)閉
1002協(xié)議錯(cuò)誤
1003無法處理的數(shù)據(jù)類型
1004~1015保留值

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8605

    瀏覽量

    151199
  • 網(wǎng)絡(luò)管理
    +關(guān)注

    關(guān)注

    0

    文章

    120

    瀏覽量

    27675
  • WebSocket
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    3749
  • 鴻蒙
    +關(guān)注

    關(guān)注

    57

    文章

    2352

    瀏覽量

    42863
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    socket 和 WebSocket 的區(qū)別

    在現(xiàn)代網(wǎng)絡(luò)通信中,Socket和WebSocket是兩種常見的通信協(xié)議。它們?cè)趯?shí)現(xiàn)網(wǎng)絡(luò)通信、數(shù)據(jù)傳輸?shù)确矫姘l(fā)揮著重要作用。然而,它們之間存在一些關(guān)鍵的區(qū)別。 1. Socket(套接字) 1.1
    的頭像 發(fā)表于 11-12 14:33 ?435次閱讀

    socket與WebSocket的區(qū)別與聯(lián)系

    ) : Socket是一種通信端點(diǎn),它在網(wǎng)絡(luò)編程中用于實(shí)現(xiàn)不同主機(jī)之間的通信。Socket可以是TCP套接字或UDP套接字,分別對(duì)應(yīng)于TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)。 TCP套接字提供了可靠的、面向連接的通信服務(wù),而UDP套接字則提供了不可靠的、無
    的頭像 發(fā)表于 11-04 09:19 ?420次閱讀

    不可錯(cuò)過的Air780E之WebSocket應(yīng)用示范!小白篇

    咋們今天說的Air780E之WebSocket應(yīng)用示范針對(duì)小白絕對(duì)是不可以錯(cuò)過的示例。
    的頭像 發(fā)表于 11-03 20:16 ?841次閱讀
    不可錯(cuò)過的Air780E之<b class='flag-5'>WebSocket</b>應(yīng)用示范!小白篇

    ESP8266_RTOS_SDK 1.4.0中的“websocket_demo”不起作用是怎么回事?

    新的SDK用戶在這里。我剛剛嘗試了昨天發(fā)布的 ESP8266_RTOS_SDK 1.4.0 中包含的示例“websocket_demo”。我唯一更改的是 websocket.c 中的 wifi 憑據(jù)
    發(fā)表于 07-18 07:05

    websocket.c RTOS演示中缺少對(duì)wifi_connect()的調(diào)用怎么辦?

    在 RTOS SDK 1.3 中,有一個(gè)名為 /examples/websocket_demo/websocket/websocket.c 的示例。在函數(shù)中有一個(gè)名為 websocket
    發(fā)表于 07-18 06:37

    請(qǐng)問websocket庫怎么讀取服務(wù)器發(fā)來的數(shù)據(jù)?

    官方websocket庫怎么讀取服務(wù)器發(fā)來的數(shù)據(jù)?
    發(fā)表于 06-25 06:40

    鴻蒙開發(fā)網(wǎng)絡(luò)管理ohos.net.socket之Socket連接

    綁定IP地址和端口,端口可以指定或由系統(tǒng)隨機(jī)分配。使用Promise方式作為異步方法。
    的頭像 發(fā)表于 06-19 09:26 ?407次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)網(wǎng)絡(luò)</b><b class='flag-5'>管理</b>:<b class='flag-5'>ohos.net</b>.socket之Socket<b class='flag-5'>連接</b>

    鴻蒙開發(fā)網(wǎng)絡(luò)管理ohos.net.connection之網(wǎng)絡(luò)連接管理

    以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetManager.Core。
    的頭像 發(fā)表于 06-18 09:20 ?739次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)網(wǎng)絡(luò)</b><b class='flag-5'>管理</b>:<b class='flag-5'>ohos.net</b>.connection之<b class='flag-5'>網(wǎng)絡(luò)連接管理</b>

    ESP32進(jìn)行websocket通信接收數(shù)據(jù)出錯(cuò)的原因?

    開發(fā),支持一對(duì)一私聊和一對(duì)多公聊 W (104983) WEBSOCKET: Total payload length=277, data_len=277, current payload offset
    發(fā)表于 06-14 07:42

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理模塊總述

    一、網(wǎng)絡(luò)管理模塊主要提供以下功能: HTTP數(shù)據(jù)請(qǐng)求:通過HTTP發(fā)起一個(gè)數(shù)據(jù)請(qǐng)求。 WebSocket連接:使用WebSocket建立服務(wù)
    發(fā)表于 04-08 09:45

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理WebSocket連接

    。使用該功能需要申請(qǐng)ohos.permission.INTERNET權(quán)限。具體接口說明如下表。 三、開發(fā)步驟 1.導(dǎo)入需要的webSocket模塊。 2.創(chuàng)建一個(gè)WebSocket
    發(fā)表于 04-07 09:46

    鴻蒙原生應(yīng)用開發(fā)-網(wǎng)絡(luò)管理Socket連接(二)

    。 import socket from \'@ohos.net.socket\'; // 創(chuàng)建一個(gè)TCPSocket連接,返回一個(gè)TCPSocket對(duì)象。 let tcp
    發(fā)表于 04-02 15:22

    鴻蒙OS開發(fā)實(shí)例:【窺探網(wǎng)絡(luò)請(qǐng)求】

    HarmonyOS 平臺(tái)中使用網(wǎng)絡(luò)請(qǐng)求,需要引入 "@ohos.net.http", 并且需要在 module.json5 文件中申請(qǐng)網(wǎng)絡(luò)權(quán)限, 即 “ohos.permission.
    的頭像 發(fā)表于 04-01 16:11 ?792次閱讀
    <b class='flag-5'>鴻蒙</b>OS<b class='flag-5'>開發(fā)</b>實(shí)例:【窺探<b class='flag-5'>網(wǎng)絡(luò)</b>請(qǐng)求】

    恒訊科技帶大家深入理解:WebSocket服務(wù)器的工作原理

    WebSocket是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的通信協(xié)議。它的設(shè)計(jì)目標(biāo)是在Web瀏覽器和服務(wù)器之間提供低延遲、高效的雙向通信。下面是深入理解WebSocket服務(wù)器工作原理的一些關(guān)鍵概念
    的頭像 發(fā)表于 01-29 16:48 ?484次閱讀

    一文詳解WebSocket協(xié)議

    在效率和網(wǎng)絡(luò)帶寬利用率方面存在諸多問題。WebSocket協(xié)議應(yīng)運(yùn)而生,對(duì)外提供了簡單的雙向數(shù)據(jù)傳輸能力。
    的頭像 發(fā)表于 01-07 11:26 ?7458次閱讀
    一文詳解<b class='flag-5'>WebSocket</b>協(xié)議