WebSocket連接

2024-01-23 16:43 更新

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

若在上述任一過程中發(fā)生錯誤,客戶端會收到error事件的回調。

導入模塊

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

完整示例

  1. import webSocket from '@ohos.net.webSocket';
  2. var defaultIpAddress = "ws://";
  3. let ws = webSocket.createWebSocket();
  4. ws.on('open', (err, value) => {
  5. console.log("on open, status:" + value['status'] + ", message:" + value['message']);
  6. // 當收到on('open')事件時,可以通過send()方法與服務器進行通信
  7. ws.send("Hello, server!", (err, value) => {
  8. if (!err) {
  9. console.log("send success");
  10. } else {
  11. console.log("send fail, err:" + JSON.stringify(err));
  12. }
  13. });
  14. });
  15. ws.on('message', (err, value) => {
  16. console.log("on message, message:" + value);
  17. // 當收到服務器的`bye`消息時(此消息字段僅為示意,具體字段需要與服務器協(xié)商),主動斷開連接
  18. if (value === 'bye') {
  19. ws.close((err, value) => {
  20. if (!err) {
  21. console.log("close success");
  22. } else {
  23. console.log("close fail, err is " + JSON.stringify(err));
  24. }
  25. });
  26. }
  27. });
  28. ws.on('close', (err, value) => {
  29. console.log("on close, code is " + value.code + ", reason is " + value.reason);
  30. });
  31. ws.on('error', (err) => {
  32. console.log("on error, error:" + JSON.stringify(err));
  33. });
  34. ws.connect(defaultIpAddress, (err, value) => {
  35. if (!err) {
  36. console.log("connect success");
  37. } else {
  38. console.log("connect fail, err:" + JSON.stringify(err));
  39. }
  40. });

webSocket.createWebSocket

createWebSocket(): WebSocket

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

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

返回值:

類型說明
WebSocket返回一個WebSocket對象,里面包括connect、send、close、on和off方法。

示例:

  1. let ws = webSocket.createWebSocket();

WebSocket

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

connect

connect(url: string, callback: AsyncCallback<boolean>): void

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
urlstring建立WebSocket連接的URL地址。
callbackAsyncCallback<boolean>回調函數(shù)。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.connect(url, (err, value) => {
  4. if (!err) {
  5. console.log("connect success");
  6. } else {
  7. console.log("connect fail, err:" + JSON.stringify(err))
  8. }
  9. });

connect

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

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
urlstring建立WebSocket連接的URL地址。
optionsWebSocketRequestOptions參考WebSocketRequestOptions。
callbackAsyncCallback<boolean>回調函數(shù)。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.connect(url, {
  4. header: {
  5. "key": "value",
  6. "key2": "value2"
  7. }
  8. }, (err, value) => {
  9. if (!err) {
  10. console.log("connect success");
  11. } else {
  12. console.log("connect fail, err:" + JSON.stringify(err))
  13. }
  14. });

connect

connect(url: string, options?: WebSocketRequestOptions): Promise<boolean>

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
urlstring建立WebSocket連接的URL地址。
optionsWebSocketRequestOptions參考WebSocketRequestOptions

返回值:

類型說明
Promise<boolean>以Promise形式返回建立連接的結果。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. let promise = ws.connect(url);
  4. promise.then((value) => {
  5. console.log("connect success")
  6. }).catch((err) => {
  7. console.log("connect fail, error:" + JSON.stringify(err))
  8. });

send

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

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
datastring | ArrayBuffer

發(fā)送的數(shù)據(jù)。

API 6及更早版本僅支持string類型。API 8起同時支持string和ArrayBuffer類型。

callbackAsyncCallback<boolean>回調函數(shù)。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.connect(url, (err, value) => {
  4. ws.send("Hello, server!", (err, value) => {
  5. if (!err) {
  6. console.log("send success");
  7. } else {
  8. console.log("send fail, err:" + JSON.stringify(err))
  9. }
  10. });
  11. });

send

send(data: string | ArrayBuffer): Promise<boolean>

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
datastring | ArrayBuffer

發(fā)送的數(shù)據(jù)。

API 6及更早版本僅支持string類型。API 8起同時支持string和ArrayBuffer類型。

返回值:

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

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.connect(url, (err, value) => {
  4. let promise = ws.send("Hello, server!");
  5. promise.then((value) => {
  6. console.log("send success")
  7. }).catch((err) => {
  8. console.log("send fail, error:" + JSON.stringify(err))
  9. });
  10. });

close

close(callback: AsyncCallback<boolean>): void

關閉WebSocket連接,使用callback方式作為異步方法。

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
callbackAsyncCallback<boolean>回調函數(shù)。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.close((err, value) => {
  4. if (!err) {
  5. console.log("close success")
  6. } else {
  7. console.log("close fail, err is " + JSON.stringify(err))
  8. }
  9. });

close

close(options: WebSocketCloseOptions, callback: AsyncCallback<boolean>): void

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
optionsWebSocketCloseOptions參考WebSocketCloseOptions。
callbackAsyncCallback<boolean>回調函數(shù)。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. ws.close({
  4. code: 1000,
  5. reason: "your reason"
  6. }, (err, value) => {
  7. if (!err) {
  8. console.log("close success")
  9. } else {
  10. console.log("close fail, err is " + JSON.stringify(err))
  11. }
  12. });

close

close(options?: WebSocketCloseOptions): Promise<boolean>

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

需要權限:ohos.permission.INTERNET

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

參數(shù):

名稱類型必填說明
optionsWebSocketCloseOptions參考WebSocketCloseOptions。

返回值:

類型說明
Promise<boolean>以Promise形式返回關閉連接的結果。

錯誤碼:

錯誤碼ID錯誤信息
401Parameter error.
201Permission denied.

示例:

  1. let ws = webSocket.createWebSocket();
  2. let url = "ws://"
  3. let promise = ws.close({
  4. code: 1000,
  5. reason: "your reason"
  6. });
  7. promise.then((value) => {
  8. console.log("close success")
  9. }).catch((err) => {
  10. console.log("close fail, err is " + JSON.stringify(err))
  11. });

on('open')

on(type: 'open', callback: AsyncCallback<Object>): void

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

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

參數(shù):

名稱類型必填說明
typestring'open':WebSocket的打開事件。
callbackAsyncCallback<Object>回調函數(shù)。

示例:

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

off('open')

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

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

說明

可以指定傳入on中的callback取消一個訂閱,也可以不指定callback清空所有訂閱。

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

參數(shù):

名稱類型必填說明
typestring'open':WebSocket的打開事件。
callbackAsyncCallback<Object>回調函數(shù)。

示例:

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

on('message')

on(type: 'message', callback: AsyncCallback<string | ArrayBuffer>): void

訂閱WebSocket的接收到服務器消息事件,使用callback方式作為異步方法。每個消息最大長度為4K,超過4K自動分片。

說明

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

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

參數(shù):

名稱類型必填說明
typestring'message':WebSocket的接收到服務器消息事件。
callbackAsyncCallback<string | ArrayBuffer 8+>回調函數(shù)。

示例:

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

off('message')

off(type: 'message', callback?: AsyncCallback<string | ArrayBuffer>): void

取消訂閱WebSocket的接收到服務器消息事件,使用callback方式作為異步方法。每個消息最大長度為4K,超過4K自動分片。

說明

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

可以指定傳入on中的callback取消一個訂閱,也可以不指定callback清空所有訂閱。

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

參數(shù):

名稱類型必填說明
typestring'message':WebSocket的接收到服務器消息事件。
callbackAsyncCallback<string |ArrayBuffer 8+>回調函數(shù)。

示例:

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

on('close')

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

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

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

參數(shù):

名稱類型必填說明
typestring'close':WebSocket的關閉事件。
callbackAsyncCallback<{ code: number, reason: string }>

回調函數(shù)。

close:close錯誤碼,reason:錯誤碼說明

示例:

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

off('close')

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

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

說明

可以指定傳入on中的callback取消一個訂閱,也可以不指定callback清空所有訂閱。

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

參數(shù):

名稱類型必填說明
typestring'close':WebSocket的關閉事件。
callbackAsyncCallback<{ code: number, reason: string }>

回調函數(shù)。

close:close錯誤碼,reason:錯誤碼說明

示例:

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

on('error')

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

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

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

參數(shù):

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

示例:

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

off('error')

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

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

說明

可以指定傳入on中的callback取消一個訂閱,也可以不指定callback清空所有訂閱。

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

參數(shù):

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

示例:

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

WebSocketRequestOptions

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

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

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

WebSocketCloseOptions

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

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

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

close錯誤碼說明

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

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

說明
1000正常關閉
1001服務器主動關閉
1002協(xié)議錯誤
1003無法處理的數(shù)據(jù)類型
1004~1015保留值
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號