WebSocket連接
說(shuō)明: 本模塊首批接口從API version 6開(kāi)始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨(dú)標(biāo)記接口的起始版本。
使用WebSocket建立服務(wù)器與客戶端的雙向連接,需要先通過(guò)[createWebSocket]方法創(chuàng)建[WebSocket]對(duì)象,然后通過(guò)[connect]方法連接到服務(wù)器。當(dāng)連接成功后,客戶端會(huì)收到[open]事件的回調(diào),之后客戶端就可以通過(guò)[send]方法與服務(wù)器進(jìn)行通信。當(dāng)服務(wù)器發(fā)信息給客戶端時(shí),客戶端會(huì)收到[message]事件的回調(diào)。當(dāng)客戶端不要此連接時(shí),可以通過(guò)調(diào)用[close]方法主動(dòng)斷開(kāi)連接,之后客戶端會(huì)收到[close]事件的回調(diào)。
若在上述任一過(guò)程中發(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í),可以通過(guò)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)斷開(kāi)連接
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連接的打開(kāi)事件、接收到服務(wù)器消息事件、關(guān)閉事件和錯(cuò)誤事件。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
返回值:
類型 | 說(shuō)明 |
---|---|
[WebSocket] | 返回一個(gè)WebSocket對(duì)象,里面包括connect、send、close、on和off方法。 |
示例:
let ws = webSocket.createWebSocket();
WebSocket
在調(diào)用WebSocket的方法前,需要先通過(guò)[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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
url | string | 是 | 建立WebSocket連接的URL地址。 |
callback | AsyncCallback | 是 | 回調(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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
url | string | 是 | 建立WebSocket連接的URL地址。 |
options | WebSocketRequestOptions | 是 | 參考[WebSocketRequestOptions]。 |
callback | AsyncCallback | 是 | 回調(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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
url | string | 是 | 建立WebSocket連接的URL地址。 |
options | WebSocketRequestOptions | 否 | 參考[WebSocketRequestOptions]。 |
返回值:
類型 | 說(shuō)明 |
---|---|
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
通過(guò)WebSocket連接發(fā)送數(shù)據(jù),使用callback方式作為異步方法。
需要權(quán)限 :ohos.permission.INTERNET
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
data | string | ArrayBuffer 8+ | 是 |
callback | AsyncCallback | 是 | 回調(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
通過(guò)WebSocket連接發(fā)送數(shù)據(jù),使用Promise方式作為異步方法。
需要權(quán)限 :ohos.permission.INTERNET
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
data | string | ArrayBuffer 8+ | 是 |
返回值:
類型 | 說(shuō)明 |
---|---|
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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
callback | AsyncCallback | 是 | 回調(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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
options | WebSocketCloseOptions | 是 | 參考[WebSocketCloseOptions]。 |
callback | AsyncCallback | 是 | 回調(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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
options | WebSocketCloseOptions | 否 | 參考[WebSocketCloseOptions]。 |
返回值:
類型 | 說(shuō)明 |
---|---|
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的打開(kāi)事件,使用callback方式作為異步方法。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'open':WebSocket的打開(kāi)事件。 |
callback | AsyncCallback | 是 | 回調(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的打開(kāi)事件,使用callback方式作為異步方法。
說(shuō)明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'open':WebSocket的打開(kāi)事件。 |
callback | AsyncCallback | 否 | 回調(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方式作為異步方法。
說(shuō)明: AsyncCallback中的數(shù)據(jù)可以是字符串(API 6)或ArrayBuffer(API 8)。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'message':WebSocket的接收到服務(wù)器消息事件。 |
callback | AsyncCallback | 是 | 回調(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方式作為異步方法。
說(shuō)明: AsyncCallback中的數(shù)據(jù)可以是字符串(API 6)或ArrayBuffer(API 8)。 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'message':WebSocket的接收到服務(wù)器消息事件。 |
callback | AsyncCallback | 否 | 回調(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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'close':WebSocket的關(guān)閉事件。 |
callback | AsyncCallback<{ 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方式作為異步方法。
說(shuō)明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'close':WebSocket的關(guān)閉事件。 |
callback | AsyncCallback<{ 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ù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'error':WebSocket的Error事件。 |
callback | ErrorCallback | 是 | 回調(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方式作為異步方法。
說(shuō)明: 可以指定傳入on中的callback取消一個(gè)訂閱,也可以不指定callback清空所有訂閱。
系統(tǒng)能力 :SystemCapability.Communication.NetStack
參數(shù):
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
type | string | 是 | 'error':WebSocket的Error事件。 |
callback | ErrorCallback | 否 | 回調(diào)函數(shù)。 |
示例:
let ws = webSocket.createWebSocket();
ws.off('error');
WebSocketRequestOptions
建立WebSocket連接時(shí),可選參數(shù)的類型和說(shuō)明。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
header | Object | 否 | 建立WebSocket連接可選參數(shù),代表建立連接時(shí)攜帶的HTTP頭信息。參數(shù)內(nèi)容自定義,也可以不指定。 |
WebSocketCloseOptions
關(guān)閉WebSocket連接時(shí),可選參數(shù)的類型和說(shuō)明。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。
參數(shù)名 | 類型 | 必填 | 說(shuō)明 |
---|---|---|---|
code | number | 否 | 錯(cuò)誤碼,關(guān)閉WebSocket連接時(shí)的可選參數(shù),可根據(jù)實(shí)際情況來(lái)填。默認(rèn)值為1000。 |
reason | string | 否 | 原因值,關(guān)閉WebSocket連接時(shí)的可選參數(shù),可根據(jù)實(shí)際情況來(lái)填。默認(rèn)值為空字符串("")。 |
close錯(cuò)誤碼說(shuō)明
發(fā)送給服務(wù)端的錯(cuò)誤碼可以自行定義,下面的列表僅供參考。
系統(tǒng)能力 :以下各項(xiàng)對(duì)應(yīng)的系統(tǒng)能力均為SystemCapability.Communication.NetStack。
值 | 說(shuō)明 |
---|---|
1000 | 正常關(guān)閉 |
1001 | 服務(wù)器主動(dòng)關(guān)閉 |
1002 | 協(xié)議錯(cuò)誤 |
1003 | 無(wú)法處理的數(shù)據(jù)類型 |
1004~1015 | 保留值 |
審核編輯 黃宇
-
接口
+關(guān)注
關(guān)注
33文章
8504瀏覽量
150846 -
網(wǎng)絡(luò)管理
+關(guān)注
關(guān)注
0文章
118瀏覽量
27656 -
WebSocket
+關(guān)注
關(guān)注
0文章
29瀏覽量
3737 -
鴻蒙
+關(guān)注
關(guān)注
57文章
2313瀏覽量
42748
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論