js-apis-webSocket.md 21.3 KB
Newer Older
1
# @ohos.net.webSocket (WebSocket连接)
C
clevercong 已提交
2

Y
Yangys 已提交
3
> **说明:**
C
clevercong 已提交
4
>
5 6
> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

C
clevercong 已提交
7

Y
Yangys 已提交
8 9 10
使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocket](#websocketcreatewebsocket)方法创建[WebSocket](#websocket)对象,然后通过[connect](#connect)方法连接到服务器。
当连接成功后,客户端会收到[open](#onopen)事件的回调,之后客户端就可以通过[send](#send)方法与服务器进行通信。
当服务器发信息给客户端时,客户端会收到[message](#onmessage)事件的回调。当客户端不要此连接时,可以通过调用[close](#close)方法主动断开连接,之后客户端会收到[close](#onclose)事件的回调。
C
clevercong 已提交
11

C
clevercong 已提交
12
若在上述任一过程中发生错误,客户端会收到[error](#onerror)事件的回调。
C
clevercong 已提交
13

C
clevercong 已提交
14
## 导入模块
C
clevercong 已提交
15

Z
zengyawen 已提交
16
```js
C
clevercong 已提交
17 18 19
import webSocket from '@ohos.net.webSocket';
```

C
clevercong 已提交
20
## 完整示例
C
clevercong 已提交
21

Z
zengyawen 已提交
22
```js
C
clevercong 已提交
23 24
import webSocket from '@ohos.net.webSocket';

Y
Yangys 已提交
25
let defaultIpAddress = "ws://";
C
clevercong 已提交
26 27
let ws = webSocket.createWebSocket();
ws.on('open', (err, value) => {
Y
Yangys 已提交
28 29 30 31 32 33 34 35 36 37 38
  if (err != undefined) {
    console.log(JSON.stringify(err))
    return
  }
  console.log("on open, status:" + value['status'] + ", message:" + value['message']);
  // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
  ws.send("Hello, server!", (err, value) => {
    if (!err) {
      console.log("send success");
    } else {
      console.log("send fail, err:" + JSON.stringify(err));
Y
Yangys 已提交
39
    }
Y
Yangys 已提交
40
  });
C
clevercong 已提交
41 42
});
ws.on('message', (err, value) => {
Y
Yangys 已提交
43 44 45 46 47 48 49 50 51 52 53
  console.log("on message, message:" + value);
  // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
  if (value === 'bye') {
    ws.close((err, value) => {
      if (!err) {
        console.log("close success");
      } else {
        console.log("close fail, err is " + JSON.stringify(err));
      }
    });
  }
C
clevercong 已提交
54 55
});
ws.on('close', (err, value) => {
Y
Yangys 已提交
56
  console.log("on close, code is " + value.code + ", reason is " + value.reason);
C
clevercong 已提交
57 58
});
ws.on('error', (err) => {
Y
Yangys 已提交
59
  console.log("on error, error:" + JSON.stringify(err));
C
clevercong 已提交
60 61
});
ws.connect(defaultIpAddress, (err, value) => {
Y
Yangys 已提交
62 63 64 65 66
  if (!err) {
    console.log("connect success");
  } else {
    console.log("connect fail, err:" + JSON.stringify(err));
  }
C
clevercong 已提交
67 68 69
});
```

C
clevercong 已提交
70
## webSocket.createWebSocket
C
clevercong 已提交
71

Y
Yangys 已提交
72
createWebSocket(): WebSocket
C
clevercong 已提交
73 74 75

创建一个WebSocket,里面包括建立连接、关闭连接、发送数据和订阅/取消订阅WebSocket连接的打开事件、接收到服务器消息事件、关闭事件和错误事件。

C
clevercong 已提交
76
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
77

C
clevercong 已提交
78
**返回值:**
C
clevercong 已提交
79

C
clevercong 已提交
80 81
| 类型                                | 说明                                                         |
| :---------------------------------- | :----------------------------------------------------------- |
C
clevercong 已提交
82
| [WebSocket](#websocket) | 返回一个WebSocket对象,里面包括connect、send、close、on和off方法。 |
C
clevercong 已提交
83

C
clevercong 已提交
84
**示例:**
C
clevercong 已提交
85

Z
zengyawen 已提交
86
```js
C
clevercong 已提交
87 88
let ws = webSocket.createWebSocket();
```
C
clevercong 已提交
89

C
clevercong 已提交
90
## WebSocket
C
clevercong 已提交
91

Z
zengyawen 已提交
92
在调用WebSocket的方法前,需要先通过[webSocket.createWebSocket](#websocketcreatewebsocket)创建一个WebSocket。
C
clevercong 已提交
93

C
clevercong 已提交
94
### connect
C
clevercong 已提交
95

Y
Yangys 已提交
96
connect(url: string, callback: AsyncCallback\<boolean\>): void
C
clevercong 已提交
97 98 99

根据URL地址,建立一个WebSocket连接,使用callback方式作为异步方法。

100 101 102
> **说明:**
> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。

C
clevercong 已提交
103 104
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
105
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
106

C
clevercong 已提交
107
**参数:**
C
clevercong 已提交
108

Y
Yangys 已提交
109
| 参数名   | 类型                     | 必填 | 说明                         |
C
clevercong 已提交
110 111 112
| -------- | ------------------------ | ---- | ---------------------------- |
| url      | string                   | 是   | 建立WebSocket连接的URL地址。 |
| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                   |
C
clevercong 已提交
113

Y
Yangys 已提交
114 115
**错误码:**

Y
Yangys 已提交
116 117 118 119
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
120

C
clevercong 已提交
121
**示例:**
C
clevercong 已提交
122

Z
zengyawen 已提交
123
```js
C
clevercong 已提交
124 125 126
let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) => {
Y
Yangys 已提交
127 128 129 130 131
  if (!err) {
    console.log("connect success");
  } else {
    console.log("connect fail, err:" + JSON.stringify(err))
  }
C
clevercong 已提交
132 133
});
```
C
clevercong 已提交
134

C
clevercong 已提交
135
### connect
C
clevercong 已提交
136

Y
Yangys 已提交
137
connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback\<boolean\>): void
C
clevercong 已提交
138 139 140

根据URL地址和header,建立一个WebSocket连接,使用callback方式作为异步方法。

141 142 143
> **说明:**
> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。

C
clevercong 已提交
144 145
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
146
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
147

C
clevercong 已提交
148
**参数:**
C
clevercong 已提交
149

Y
Yangys 已提交
150
| 参数名   | 类型                     | 必填 | 说明                                                    |
C
clevercong 已提交
151 152
| -------- | ------------------------ | ---- | ------------------------------------------------------- |
| url      | string                   | 是   | 建立WebSocket连接的URL地址。                            |
C
clevercong 已提交
153
| options  | WebSocketRequestOptions  | 是   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
C
clevercong 已提交
154
| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                              |
C
clevercong 已提交
155

Y
Yangys 已提交
156 157
**错误码:**

Y
Yangys 已提交
158 159 160 161
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
C
clevercong 已提交
162

C
clevercong 已提交
163
**示例:**
C
clevercong 已提交
164

Z
zengyawen 已提交
165
```js
C
clevercong 已提交
166 167 168
let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, {
Y
Yangys 已提交
169 170 171 172
  header: {
    "key": "value",
    "key2": "value2"
  }
C
clevercong 已提交
173
}, (err, value) => {
Y
Yangys 已提交
174 175 176 177 178
  if (!err) {
    console.log("connect success");
  } else {
    console.log("connect fail, err:" + JSON.stringify(err))
  }
C
clevercong 已提交
179 180
});
```
C
clevercong 已提交
181

C
clevercong 已提交
182
### connect
C
clevercong 已提交
183

Y
Yangys 已提交
184
connect(url: string, options?: WebSocketRequestOptions): Promise\<boolean\>
C
clevercong 已提交
185 186 187

根据URL地址和header,建立一个WebSocket连接,使用Promise方式作为异步方法。

188 189 190
> **说明:**
> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。

C
clevercong 已提交
191 192
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
193
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
194

C
clevercong 已提交
195
**参数:**
C
clevercong 已提交
196

Y
Yangys 已提交
197
| 参数名  | 类型                    | 必填 | 说明                                                    |
C
clevercong 已提交
198 199
| ------- | ----------------------- | ---- | ------------------------------------------------------- |
| url     | string                  | 是   | 建立WebSocket连接的URL地址。                            |
C
clevercong 已提交
200
| options | WebSocketRequestOptions | 否   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
C
clevercong 已提交
201

C
clevercong 已提交
202
**返回值:**
C
clevercong 已提交
203

C
clevercong 已提交
204 205 206
| 类型               | 说明                              |
| :----------------- | :-------------------------------- |
| Promise\<boolean\> | 以Promise形式返回建立连接的结果。 |
C
clevercong 已提交
207

Y
Yangys 已提交
208 209
**错误码:**

Y
Yangys 已提交
210 211 212 213
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
214

C
clevercong 已提交
215
**示例:**
C
clevercong 已提交
216

Z
zengyawen 已提交
217
```js
C
clevercong 已提交
218 219 220 221
let ws = webSocket.createWebSocket();
let url = "ws://"
let promise = ws.connect(url);
promise.then((value) => {
Y
Yangys 已提交
222
  console.log("connect success")
C
clevercong 已提交
223
}).catch((err) => {
Y
Yangys 已提交
224
  console.log("connect fail, error:" + JSON.stringify(err))
C
clevercong 已提交
225 226
});
```
C
clevercong 已提交
227

C
clevercong 已提交
228
### send
C
clevercong 已提交
229

Y
Yangys 已提交
230
send(data: string | ArrayBuffer, callback: AsyncCallback\<boolean\>): void
C
clevercong 已提交
231 232 233

通过WebSocket连接发送数据,使用callback方式作为异步方法。

C
clevercong 已提交
234 235
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
236
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
237

C
clevercong 已提交
238
**参数:**
C
clevercong 已提交
239

Y
Yangys 已提交
240
| 参数名   | 类型                     | 必填 | 说明         |
C
clevercong 已提交
241
| -------- | ------------------------ | ---- | ------------ |
Y
Yangys 已提交
242
| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
C
clevercong 已提交
243
| callback | AsyncCallback\<boolean\> | 是   | 回调函数。   |
C
clevercong 已提交
244

Y
Yangys 已提交
245 246
**错误码:**

Y
Yangys 已提交
247 248 249 250
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
251

C
clevercong 已提交
252
**示例:**
C
clevercong 已提交
253

Z
zengyawen 已提交
254
```js
C
clevercong 已提交
255 256 257
let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) => {
Y
Yangys 已提交
258 259 260 261 262 263 264
  ws.send("Hello, server!", (err, value) => {
    if (!err) {
      console.log("send success");
    } else {
      console.log("send fail, err:" + JSON.stringify(err))
    }
  });
C
clevercong 已提交
265 266
});
```
C
clevercong 已提交
267

C
clevercong 已提交
268
### send
C
clevercong 已提交
269

Y
Yangys 已提交
270
send(data: string | ArrayBuffer): Promise\<boolean\>
C
clevercong 已提交
271 272 273

通过WebSocket连接发送数据,使用Promise方式作为异步方法。

C
clevercong 已提交
274 275
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
276
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
277

C
clevercong 已提交
278
**参数:**
C
clevercong 已提交
279

Y
Yangys 已提交
280
| 参数名 | 类型   | 必填 | 说明         |
C
clevercong 已提交
281
| ------ | ------ | ---- | ------------ |
Y
Yangys 已提交
282
| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
C
clevercong 已提交
283

C
clevercong 已提交
284
**返回值:**
C
clevercong 已提交
285

C
clevercong 已提交
286 287 288
| 类型               | 说明                              |
| :----------------- | :-------------------------------- |
| Promise\<boolean\> | 以Promise形式返回发送数据的结果。 |
C
clevercong 已提交
289

Y
Yangys 已提交
290 291
**错误码:**

Y
Yangys 已提交
292 293 294 295
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
296

C
clevercong 已提交
297
**示例:**
C
clevercong 已提交
298

Z
zengyawen 已提交
299
```js
C
clevercong 已提交
300 301 302
let ws = webSocket.createWebSocket();
let url = "ws://"
ws.connect(url, (err, value) => {
Y
Yangys 已提交
303 304 305 306 307 308
  let promise = ws.send("Hello, server!");
  promise.then((value) => {
    console.log("send success")
  }).catch((err) => {
    console.log("send fail, error:" + JSON.stringify(err))
  });
C
clevercong 已提交
309 310
});
```
C
clevercong 已提交
311

C
clevercong 已提交
312
### close
C
clevercong 已提交
313

Y
Yangys 已提交
314
close(callback: AsyncCallback\<boolean\>): void
C
clevercong 已提交
315 316 317

关闭WebSocket连接,使用callback方式作为异步方法。

C
clevercong 已提交
318 319
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
320
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
321

C
clevercong 已提交
322
**参数:**
C
clevercong 已提交
323

Y
Yangys 已提交
324
| 参数名   | 类型                     | 必填 | 说明       |
C
clevercong 已提交
325 326
| -------- | ------------------------ | ---- | ---------- |
| callback | AsyncCallback\<boolean\> | 是   | 回调函数。 |
C
clevercong 已提交
327

Y
Yangys 已提交
328 329
**错误码:**

Y
Yangys 已提交
330 331 332 333
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
334

C
clevercong 已提交
335
**示例:**
C
clevercong 已提交
336

Z
zengyawen 已提交
337
```js
C
clevercong 已提交
338 339
let ws = webSocket.createWebSocket();
ws.close((err, value) => {
Y
Yangys 已提交
340 341 342 343 344
  if (!err) {
    console.log("close success")
  } else {
    console.log("close fail, err is " + JSON.stringify(err))
  }
C
clevercong 已提交
345 346
});
```
C
clevercong 已提交
347

C
clevercong 已提交
348
### close
C
clevercong 已提交
349

Y
Yangys 已提交
350
close(options: WebSocketCloseOptions, callback: AsyncCallback\<boolean\>): void
C
clevercong 已提交
351 352 353

根据可选参数code和reason,关闭WebSocket连接,使用callback方式作为异步方法。

C
clevercong 已提交
354 355
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
356
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
357

C
clevercong 已提交
358
**参数:**
C
clevercong 已提交
359

Y
Yangys 已提交
360
| 参数名   | 类型                     | 必填 | 说明                                                  |
C
clevercong 已提交
361
| -------- | ------------------------ | ---- | ----------------------------------------------------- |
C
clevercong 已提交
362
| options  | WebSocketCloseOptions    | 是   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
C
clevercong 已提交
363
| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                            |
C
clevercong 已提交
364

Y
Yangys 已提交
365 366
**错误码:**

Y
Yangys 已提交
367 368 369 370
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
371

C
clevercong 已提交
372
**示例:**
C
clevercong 已提交
373

Z
zengyawen 已提交
374
```js
C
clevercong 已提交
375 376
let ws = webSocket.createWebSocket();
ws.close({
Y
Yangys 已提交
377 378
  code: 1000,
  reason: "your reason"
C
clevercong 已提交
379
}, (err, value) => {
Y
Yangys 已提交
380 381 382 383 384
  if (!err) {
    console.log("close success")
  } else {
    console.log("close fail, err is " + JSON.stringify(err))
  }
C
clevercong 已提交
385 386
});
```
C
clevercong 已提交
387

C
clevercong 已提交
388
### close
C
clevercong 已提交
389

Y
Yangys 已提交
390
close(options?: WebSocketCloseOptions): Promise\<boolean\>
C
clevercong 已提交
391 392 393

根据可选参数code和reason,关闭WebSocket连接,使用Promise方式作为异步方法。

C
clevercong 已提交
394 395
**需要权限**:ohos.permission.INTERNET

C
clevercong 已提交
396
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
397

C
clevercong 已提交
398
**参数:**
C
clevercong 已提交
399

Y
Yangys 已提交
400
| 参数名  | 类型                  | 必填 | 说明                                                  |
C
clevercong 已提交
401
| ------- | --------------------- | ---- | ----------------------------------------------------- |
C
clevercong 已提交
402
| options | WebSocketCloseOptions | 否   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
C
clevercong 已提交
403

C
clevercong 已提交
404
**返回值:**
C
clevercong 已提交
405

C
clevercong 已提交
406 407 408
| 类型               | 说明                              |
| :----------------- | :-------------------------------- |
| Promise\<boolean\> | 以Promise形式返回关闭连接的结果。 |
C
clevercong 已提交
409

Y
Yangys 已提交
410 411
**错误码:**

Y
Yangys 已提交
412 413 414 415
| 错误码ID | 错误信息                 |
| ------- | ----------------------- |
| 401     | Parameter error.        |
| 201     | Permission denied.      |
Y
Yangys 已提交
416

C
clevercong 已提交
417
**示例:**
C
clevercong 已提交
418

Z
zengyawen 已提交
419
```js
C
clevercong 已提交
420 421
let ws = webSocket.createWebSocket();
let promise = ws.close({
Y
Yangys 已提交
422 423
  code: 1000,
  reason: "your reason"
C
clevercong 已提交
424 425
});
promise.then((value) => {
Y
Yangys 已提交
426
  console.log("close success")
C
clevercong 已提交
427
}).catch((err) => {
Y
Yangys 已提交
428
  console.log("close fail, err is " + JSON.stringify(err))
C
clevercong 已提交
429 430
});
```
C
clevercong 已提交
431

Y
Yangys 已提交
432
### on('open')
C
clevercong 已提交
433

Y
Yangys 已提交
434
on(type: 'open', callback: AsyncCallback\<Object\>): void
C
clevercong 已提交
435 436 437

订阅WebSocket的打开事件,使用callback方式作为异步方法。

C
clevercong 已提交
438
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
439

C
clevercong 已提交
440
**参数:**
C
clevercong 已提交
441

Y
Yangys 已提交
442
| 参数名   | 类型                    | 必填 | 说明                          |
C
clevercong 已提交
443 444 445
| -------- | ----------------------- | ---- | ----------------------------- |
| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
| callback | AsyncCallback\<Object\> | 是   | 回调函数。                    |
C
clevercong 已提交
446

C
clevercong 已提交
447
**示例:**
C
clevercong 已提交
448

Z
zengyawen 已提交
449
```js
C
clevercong 已提交
450 451
let ws = webSocket.createWebSocket();
ws.on('open', (err, value) => {
Y
Yangys 已提交
452
  console.log("on open, status:" + value['status'] + ", message:" + value['message']);
C
clevercong 已提交
453 454
});
```
C
clevercong 已提交
455

Y
Yangys 已提交
456
### off('open')
C
clevercong 已提交
457

Y
Yangys 已提交
458
off(type: 'open', callback?: AsyncCallback\<Object\>): void
C
clevercong 已提交
459 460 461

取消订阅WebSocket的打开事件,使用callback方式作为异步方法。

Y
Yangys 已提交
462 463
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
464

C
clevercong 已提交
465
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
466

C
clevercong 已提交
467
**参数:**
C
clevercong 已提交
468

Y
Yangys 已提交
469
| 参数名   | 类型                    | 必填 | 说明                          |
C
clevercong 已提交
470 471 472
| -------- | ----------------------- | ---- | ----------------------------- |
| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
| callback | AsyncCallback\<Object\> | 否   | 回调函数。                    |
C
clevercong 已提交
473

C
clevercong 已提交
474
**示例:**
C
clevercong 已提交
475

Z
zengyawen 已提交
476
```js
C
clevercong 已提交
477 478
let ws = webSocket.createWebSocket();
let callback1 = (err, value) => {
Y
Yangys 已提交
479
  console.log("on open, status:" + value['status'] + ", message:" + value['message']);
C
clevercong 已提交
480 481 482 483 484
}
ws.on('open', callback1);
// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅
ws.off('open', callback1);
```
C
clevercong 已提交
485

Y
Yangys 已提交
486
### on('message')
C
clevercong 已提交
487

Y
Yangys 已提交
488
on(type: 'message', callback: AsyncCallback\<string | ArrayBuffer\>): void
C
clevercong 已提交
489

M
fix doc  
maosiping 已提交
490
订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。每个消息最大长度为4K,超过4K自动分片。
C
clevercong 已提交
491

Y
Yangys 已提交
492 493
> **说明:**
> AsyncCallback中的数据可以是字符串(API 6)或ArrayBuffer(API 8)。
C
clevercong 已提交
494

C
clevercong 已提交
495
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
496

C
clevercong 已提交
497
**参数:**
C
clevercong 已提交
498

Y
Yangys 已提交
499
| 参数名   | 类型                    | 必填 | 说明                                         |
C
clevercong 已提交
500 501 502
| -------- | ----------------------- | ---- | -------------------------------------------- |
| type     | string                  | 是   | 'message':WebSocket的接收到服务器消息事件。 |
| callback | AsyncCallback\<string \| ArrayBuffer <sup>8+</sup>\> | 是   | 回调函数。                                   |
C
clevercong 已提交
503

C
clevercong 已提交
504
**示例:**
C
clevercong 已提交
505

Z
zengyawen 已提交
506
```js
C
clevercong 已提交
507 508
let ws = webSocket.createWebSocket();
ws.on('message', (err, value) => {
Y
Yangys 已提交
509
  console.log("on message, message:" + value);
C
clevercong 已提交
510 511
});
```
C
clevercong 已提交
512

Y
Yangys 已提交
513
### off('message')
C
clevercong 已提交
514

Y
Yangys 已提交
515
off(type: 'message', callback?: AsyncCallback\<string | ArrayBuffer\>): void
C
clevercong 已提交
516

M
fix doc  
maosiping 已提交
517
取消订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。每个消息最大长度为4K,超过4K自动分片。
C
clevercong 已提交
518

Y
Yangys 已提交
519 520 521
> **说明:**
> AsyncCallback中的数据可以是字符串(API 6)或ArrayBuffer(API 8)。
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
522

C
clevercong 已提交
523
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
524

C
clevercong 已提交
525
**参数:**
C
clevercong 已提交
526

Y
Yangys 已提交
527
| 参数名   | 类型                                                | 必填 | 说明                                         |
C
clevercong 已提交
528 529 530
| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
| type     | string                                              | 是   | 'message':WebSocket的接收到服务器消息事件。 |
| callback | AsyncCallback\<string \|ArrayBuffer <sup>8+</sup>\> | 否   | 回调函数。                                   |
C
clevercong 已提交
531

C
clevercong 已提交
532
**示例:**
C
clevercong 已提交
533

Z
zengyawen 已提交
534
```js
C
clevercong 已提交
535 536 537
let ws = webSocket.createWebSocket();
ws.off('message');
```
C
clevercong 已提交
538

Y
Yangys 已提交
539
### on('close')
C
clevercong 已提交
540

Y
Yangys 已提交
541
on(type: 'close', callback: AsyncCallback\<{ code: number, reason: string }\>): void
C
clevercong 已提交
542 543 544

订阅WebSocket的关闭事件,使用callback方式作为异步方法。

C
clevercong 已提交
545
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
546

C
clevercong 已提交
547
**参数:**
C
clevercong 已提交
548

Y
Yangys 已提交
549
| 参数名   | 类型                                            | 必填 | 说明                           |
C
clevercong 已提交
550 551
| -------- | ----------------------------------------------- | ---- | ------------------------------ |
| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
Y
Yangys 已提交
552
| callback | AsyncCallback\<{ code: number, reason: string }\> | 是   | 回调函数。<br>close:close错误码,reason:错误码说明 |
C
clevercong 已提交
553

C
clevercong 已提交
554
**示例:**
C
clevercong 已提交
555

Z
zengyawen 已提交
556
```js
C
clevercong 已提交
557 558
let ws = webSocket.createWebSocket();
ws.on('close', (err, value) => {
Y
Yangys 已提交
559
  console.log("on close, code is " + value.code + ", reason is " + value.reason);
C
clevercong 已提交
560 561
});
```
C
clevercong 已提交
562

Y
Yangys 已提交
563
### off('close')
C
clevercong 已提交
564

Y
Yangys 已提交
565
off(type: 'close', callback?: AsyncCallback\<{ code: number, reason: string }\>): void
C
clevercong 已提交
566 567 568

取消订阅WebSocket的关闭事件,使用callback方式作为异步方法。

Y
Yangys 已提交
569 570
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
571

C
clevercong 已提交
572
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
573

C
clevercong 已提交
574
**参数:**
C
clevercong 已提交
575

Y
Yangys 已提交
576
| 参数名   | 类型                                            | 必填 | 说明                           |
C
clevercong 已提交
577 578
| -------- | ----------------------------------------------- | ---- | ------------------------------ |
| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
Y
Yangys 已提交
579
| callback | AsyncCallback\<{ code: number, reason: string }\> | 否   | 回调函数。<br>close:close错误码,reason:错误码说明 |
C
clevercong 已提交
580

C
clevercong 已提交
581
**示例:**
C
clevercong 已提交
582

Z
zengyawen 已提交
583
```js
C
clevercong 已提交
584 585 586
let ws = webSocket.createWebSocket();
ws.off('close');
```
C
clevercong 已提交
587

Y
Yangys 已提交
588
### on('error')
C
clevercong 已提交
589

Y
Yangys 已提交
590
on(type: 'error', callback: ErrorCallback): void
C
clevercong 已提交
591 592 593

订阅WebSocket的Error事件,使用callback方式作为异步方法。

C
clevercong 已提交
594
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
595

C
clevercong 已提交
596
**参数:**
C
clevercong 已提交
597

Y
Yangys 已提交
598
| 参数名   | 类型          | 必填 | 说明                            |
C
clevercong 已提交
599 600
| -------- | ------------- | ---- | ------------------------------- |
| type     | string        | 是   | 'error':WebSocket的Error事件。 |
601
| callback | ErrorCallback | 是   | 回调函数。<br>常见错误码:200 |
C
clevercong 已提交
602

C
clevercong 已提交
603
**示例:**
C
clevercong 已提交
604

Z
zengyawen 已提交
605
```js
C
clevercong 已提交
606 607
let ws = webSocket.createWebSocket();
ws.on('error', (err) => {
Y
Yangys 已提交
608
  console.log("on error, error:" + JSON.stringify(err))
C
clevercong 已提交
609 610
});
```
C
clevercong 已提交
611

Y
Yangys 已提交
612
### off('error')
C
clevercong 已提交
613

Y
Yangys 已提交
614
off(type: 'error', callback?: ErrorCallback): void
C
clevercong 已提交
615 616 617

取消订阅WebSocket的Error事件,使用callback方式作为异步方法。

Y
Yangys 已提交
618 619
> **说明:**
> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
C
clevercong 已提交
620

C
clevercong 已提交
621
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
622

C
clevercong 已提交
623
**参数:**
C
clevercong 已提交
624

Y
Yangys 已提交
625
| 参数名   | 类型          | 必填 | 说明                            |
C
clevercong 已提交
626 627 628
| -------- | ------------- | ---- | ------------------------------- |
| type     | string        | 是   | 'error':WebSocket的Error事件。 |
| callback | ErrorCallback | 否   | 回调函数。                      |
C
clevercong 已提交
629

C
clevercong 已提交
630
**示例:**
C
clevercong 已提交
631

Z
zengyawen 已提交
632
```js
C
clevercong 已提交
633 634 635
let ws = webSocket.createWebSocket();
ws.off('error');
```
C
clevercong 已提交
636

C
clevercong 已提交
637
## WebSocketRequestOptions
C
clevercong 已提交
638 639 640

建立WebSocket连接时,可选参数的类型和说明。

Z
zengyawen 已提交
641
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
642

L
liyufan 已提交
643
| 名称 | 类型   | 必填 | 说明                                                         |
C
clevercong 已提交
644 645 646
| ------ | ------ | ---- | ------------------------------------------------------------ |
| header | Object | 否   | 建立WebSocket连接可选参数,代表建立连接时携带的HTTP头信息。参数内容自定义,也可以不指定。 |

C
clevercong 已提交
647
## WebSocketCloseOptions
C
clevercong 已提交
648 649 650

关闭WebSocket连接时,可选参数的类型和说明。

Z
zengyawen 已提交
651
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
652

L
liyufan 已提交
653
| 名称 | 类型   | 必填 | 说明                                                         |
C
clevercong 已提交
654 655 656 657
| ------ | ------ | ---- | ------------------------------------------------------------ |
| code   | number | 否   | 错误码,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为1000。 |
| reason | string | 否   | 原因值,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为空字符串("")。 |

C
clevercong 已提交
658
## close错误码说明
C
clevercong 已提交
659 660 661

发送给服务端的错误码可以自行定义,下面的列表仅供参考。

Z
zengyawen 已提交
662
**系统能力**:SystemCapability.Communication.NetStack
C
clevercong 已提交
663

C
clevercong 已提交
664 665 666 667 668 669 670 671
| 值        | 说明               |
| :-------- | :----------------- |
| 1000      | 正常关闭           |
| 1001      | 服务器主动关闭     |
| 1002      | 协议错误           |
| 1003      | 无法处理的数据类型 |
| 1004~1015 | 保留值             |