1# @ohos.net.webSocket (WebSocket连接)
2
3> **说明:**
4>
5> 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
6
7
8使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocket](#websocketcreatewebsocket6)方法创建[WebSocket](#websocket6)对象,然后通过[connect](#connect6)方法连接到服务器。
9当连接成功后,客户端会收到[open](#onopen6)事件的回调,之后客户端就可以通过[send](#send6)方法与服务器进行通信。
10当服务器发信息给客户端时,客户端会收到[message](#onmessage6)事件的回调。当客户端不要此连接时,可以通过调用[close](#close6)方法主动断开连接,之后客户端会收到[close](#onclose6)事件的回调。
11
12若在上述任一过程中发生错误,客户端会收到[error](#onerror6)事件的回调。
13
14## 导入模块
15
16```ts
17import { webSocket } from '@kit.NetworkKit';
18```
19
20## 完整示例
21
22```ts
23import { webSocket } from '@kit.NetworkKit';
24import { BusinessError } from '@kit.BasicServicesKit';
25
26let defaultIpAddress = "ws://";
27let ws = webSocket.createWebSocket();
28ws.on('open', (err:BusinessError, value: Object) => {
29  if (err != undefined) {
30    console.log(JSON.stringify(err));
31    return;
32  }
33  // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
34  ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
35    if (!err) {
36      console.log("send success");
37    } else {
38      console.log("send fail, err:" + JSON.stringify(err));
39    }
40  });
41});
42ws.on('message',(error: BusinessError, value: string | ArrayBuffer) => {
43  console.log("on message, message:" + value);
44  // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
45  if (value === 'bye') {
46    ws.close((err: BusinessError, value: boolean) => {
47      if (!err) {
48        console.log("close success");
49      } else {
50        console.log("close fail, err is " + JSON.stringify(err));
51      }
52    });
53  }
54});
55ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
56  console.log("on close, code is " + value.code + ", reason is " + value.reason);
57});
58ws.on('error', (err: BusinessError) => {
59  console.log("on error, error:" + JSON.stringify(err));
60});
61ws.connect(defaultIpAddress, {
62  header:{
63      name1: 'value1',
64      name2: 'value2',
65      name3: 'value3'
66  },
67  proxy: {
68      host: '192.168.0.150',
69      port: 8888,
70      exclusionList: []
71  },
72  protocol: 'my-protocol',
73  }, (err: BusinessError, value: boolean) => {
74  if (!err) {
75    console.log("connect success");
76  } else {
77    console.log("connect fail, err:" + JSON.stringify(err));
78  }
79  ws.close((err: BusinessError) => {
80    if (!err) {
81      console.log("close success");
82    } else {
83      console.log("close fail, err is " + JSON.stringify(err));
84    }
85  });
86});
87```
88
89## webSocket.createWebSocket<sup>6+</sup>
90
91createWebSocket(): WebSocket
92
93创建一个WebSocket,里面包括建立连接、关闭连接、发送数据和订阅/取消订阅WebSocket连接的打开事件、接收到服务器消息事件、关闭事件和错误事件。
94
95**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
96
97**系统能力**:SystemCapability.Communication.NetStack
98
99**返回值:**
100
101| 类型                                | 说明                                                         |
102| :---------------------------------- | :----------------------------------------------------------- |
103| [WebSocket](#websocket6) | 返回一个WebSocket对象,里面包括connect、send、close、on和off方法。 |
104
105**示例:**
106
107```ts
108let ws: webSocket.WebSocket = webSocket.createWebSocket();
109```
110
111## WebSocket<sup>6+</sup>
112
113在调用WebSocket的方法前,需要先通过[webSocket.createWebSocket](#websocketcreatewebsocket6)创建一个WebSocket。
114
115### connect<sup>6+</sup>
116
117connect(url: string, callback: AsyncCallback\<boolean\>): void
118
119根据URL地址,建立一个WebSocket连接,使用callback方式作为异步方法。
120
121> **说明:**
122> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。
123
124**需要权限**:ohos.permission.INTERNET
125
126**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
127
128**系统能力**:SystemCapability.Communication.NetStack
129
130**参数:**
131
132| 参数名   | 类型                     | 必填 | 说明                         |
133| -------- | ------------------------ | ---- | ---------------------------- |
134| url      | string                   | 是   | 建立WebSocket连接的URL地址。 |
135| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                   |
136
137**错误码:**
138
139| 错误码ID              | 错误信息                                   |
140| --------------------- | ------------------------------------------ |
141| 401                   | Parameter error.                           |
142| 201                   | Permission denied.                         |
143| 2302001<sup>12+</sup> | Websocket url error.                       |
144| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
145| 2302003<sup>12+</sup> | Websocket connection already exists.       |
146| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
147| 2302999<sup>10+</sup> | Websocket other unknown error.             |
148
149> **错误码说明:**
150> 以上错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)。
151
152**示例:**
153
154```ts
155import { webSocket } from '@kit.NetworkKit';
156import { BusinessError } from '@kit.BasicServicesKit';
157
158let ws = webSocket.createWebSocket();
159let url = "ws://";
160ws.connect(url, (err: BusinessError, value: boolean) => {
161  if (!err) {
162    console.log("connect success");
163  } else {
164    console.log("connect fail, err:" + JSON.stringify(err));
165  }
166});
167```
168
169### connect<sup>6+</sup>
170
171connect(url: string, options: WebSocketRequestOptions, callback: AsyncCallback\<boolean\>): void
172
173根据URL地址和header,建立一个WebSocket连接,使用callback方式作为异步方法。
174
175> **说明:**
176> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。
177
178**需要权限**:ohos.permission.INTERNET
179
180**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
181
182**系统能力**:SystemCapability.Communication.NetStack
183
184**参数:**
185
186| 参数名   | 类型                     | 必填 | 说明                                                    |
187| -------- | ------------------------ | ---- | ------------------------------------------------------- |
188| url      | string                   | 是   | 建立WebSocket连接的URL地址。                            |
189| options  | WebSocketRequestOptions  | 是   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
190| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                              |
191
192**错误码:**
193
194| 错误码ID              | 错误信息                                   |
195| --------------------- | ------------------------------------------ |
196| 401                   | Parameter error.                           |
197| 201                   | Permission denied.                         |
198| 2302001<sup>12+</sup> | Websocket url error.                       |
199| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
200| 2302003<sup>12+</sup> | Websocket connection already exists.       |
201| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
202| 2302999<sup>10+</sup> | Websocket other unknown error.             |
203
204> **错误码说明:**
205> 以上错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)。
206
207**示例:**
208
209```ts
210import { webSocket } from '@kit.NetworkKit';
211import { BusinessError } from '@kit.BasicServicesKit';
212
213let ws = webSocket.createWebSocket();
214let options: webSocket.WebSocketRequestOptions | undefined;
215if (options !=undefined) {
216  options.header = {
217     name1: "value1",
218     name2: "value2",
219     name3: "value3"
220  };
221  options.caPath = "";
222}
223let url = "ws://"
224ws.connect(url, options, (err: BusinessError, value: Object) => {
225  if (!err) {
226    console.log("connect success");
227  } else {
228    console.log("connect fail, err:" + JSON.stringify(err))
229  }
230});
231```
232
233### connect<sup>6+</sup>
234
235connect(url: string, options?: WebSocketRequestOptions): Promise\<boolean\>
236
237根据URL地址和header,建立一个WebSocket连接,使用Promise方式作为异步方法。
238
239> **说明:**
240> 可通过监听error事件获得该接口的执行结果,错误发生时会得到错误码:200。
241
242**需要权限**:ohos.permission.INTERNET
243
244**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
245
246**系统能力**:SystemCapability.Communication.NetStack
247
248**参数:**
249
250| 参数名  | 类型                    | 必填 | 说明                                                    |
251| ------- | ----------------------- | ---- | ------------------------------------------------------- |
252| url     | string                  | 是   | 建立WebSocket连接的URL地址。                            |
253| options | WebSocketRequestOptions | 否   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
254
255**返回值:**
256
257| 类型               | 说明                              |
258| :----------------- | :-------------------------------- |
259| Promise\<boolean\> | 以Promise形式返回建立连接的结果。 |
260
261**错误码:**
262
263| 错误码ID              | 错误信息                                   |
264| --------------------- | ------------------------------------------ |
265| 401                   | Parameter error.                           |
266| 201                   | Permission denied.                         |
267| 2302001<sup>12+</sup> | Websocket url error.                       |
268| 2302002<sup>12+</sup> | Websocket certificate file does not exist. |
269| 2302003<sup>12+</sup> | Websocket connection already exists.       |
270| 2302998<sup>12+</sup> | It is not allowed to access this domain.   |
271| 2302999<sup>10+</sup> | Websocket other unknown error.             |
272
273> **错误码说明:**
274> 以上错误码的详细介绍参见[webSocket错误码](errorcode-net-webSocket.md)。
275
276**示例:**
277
278```ts
279import { webSocket } from '@kit.NetworkKit';
280
281let ws = webSocket.createWebSocket();
282let url = "ws://"
283let promise = ws.connect(url);
284promise.then((value: boolean) => {
285  console.log("connect success")
286}).catch((err:string) => {
287  console.log("connect fail, error:" + JSON.stringify(err))
288});
289```
290
291### send<sup>6+</sup>
292
293send(data: string | ArrayBuffer, callback: AsyncCallback\<boolean\>): void
294
295通过WebSocket连接发送数据,使用callback方式作为异步方法。
296
297**需要权限**:ohos.permission.INTERNET
298
299**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
300
301**系统能力**:SystemCapability.Communication.NetStack
302
303**参数:**
304
305| 参数名   | 类型                     | 必填 | 说明         |
306| -------- | ------------------------ | ---- | ------------ |
307| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
308| callback | AsyncCallback\<boolean\> | 是   | 回调函数。   |
309
310**错误码:**
311
312| 错误码ID | 错误信息                 |
313| ------- | ----------------------- |
314| 401     | Parameter error.        |
315| 201     | Permission denied.      |
316
317**示例:**
318
319```ts
320import { webSocket } from '@kit.NetworkKit';
321import { BusinessError } from '@kit.BasicServicesKit';
322
323let ws = webSocket.createWebSocket();
324let url = "ws://"
325class OutValue {
326  status: number = 0
327  message: string = ""
328}
329ws.connect(url, (err: BusinessError, value: boolean) => {
330    if (!err) {
331      console.log("connect success");
332    } else {
333      console.log("connect fail, err:" + JSON.stringify(err))
334    }
335});
336ws.on('open', (err: BusinessError, value: Object) => {
337  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
338    ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
339    if (!err) {
340      console.log("send success");
341    } else {
342      console.log("send fail, err:" + JSON.stringify(err))
343    }
344  });
345});
346```
347
348> **说明**
349>
350> send接口必须在监听到open事件后才可以调用。
351
352### send<sup>6+</sup>
353
354send(data: string | ArrayBuffer): Promise\<boolean\>
355
356通过WebSocket连接发送数据,使用Promise方式作为异步方法。
357
358**需要权限**:ohos.permission.INTERNET
359
360**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
361
362**系统能力**:SystemCapability.Communication.NetStack
363
364**参数:**
365
366| 参数名 | 类型   | 必填 | 说明         |
367| ------ | ------ | ---- | ------------ |
368| data     | string \| ArrayBuffer | 是   | 发送的数据。<br>API 6及更早版本仅支持string类型。API 8起同时支持string和ArrayBuffer类型。 |
369
370**返回值:**
371
372| 类型               | 说明                              |
373| :----------------- | :-------------------------------- |
374| Promise\<boolean\> | 以Promise形式返回发送数据的结果。 |
375
376**错误码:**
377
378| 错误码ID | 错误信息                 |
379| ------- | ----------------------- |
380| 401     | Parameter error.        |
381| 201     | Permission denied.      |
382
383**示例:**
384
385```ts
386import { webSocket } from '@kit.NetworkKit';
387import { BusinessError } from '@kit.BasicServicesKit';
388
389let ws = webSocket.createWebSocket();
390let url = "ws://"
391class OutValue {
392  status: number = 0
393  message: string = ""
394}
395ws.connect(url, (err: BusinessError, value: boolean) => {
396    if (!err) {
397      console.log("connect success");
398    } else {
399      console.log("connect fail, err:" + JSON.stringify(err))
400    }
401});
402
403ws.on('open', (err: BusinessError, value: Object) => {
404  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
405  let promise = ws.send("Hello, server!");
406  promise.then((value: boolean) => {
407    console.log("send success")
408  }).catch((err:string) => {
409    console.log("send fail, error:" + JSON.stringify(err))
410  });
411});
412```
413
414> **说明**
415>
416> send接口必须在监听到open事件后才可以调用。
417
418### close<sup>6+</sup>
419
420close(callback: AsyncCallback\<boolean\>): void
421
422关闭WebSocket连接,使用callback方式作为异步方法。
423
424**需要权限**:ohos.permission.INTERNET
425
426**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
427
428**系统能力**:SystemCapability.Communication.NetStack
429
430**参数:**
431
432| 参数名   | 类型                     | 必填 | 说明       |
433| -------- | ------------------------ | ---- | ---------- |
434| callback | AsyncCallback\<boolean\> | 是   | 回调函数。 |
435
436**错误码:**
437
438| 错误码ID | 错误信息                 |
439| ------- | ----------------------- |
440| 401     | Parameter error.        |
441| 201     | Permission denied.      |
442
443**示例:**
444
445```ts
446import { webSocket } from '@kit.NetworkKit';
447import { BusinessError } from '@kit.BasicServicesKit';
448
449let ws = webSocket.createWebSocket();
450ws.close((err: BusinessError) => {
451  if (!err) {
452    console.log("close success")
453  } else {
454    console.log("close fail, err is " + JSON.stringify(err))
455  }
456});
457```
458
459### close<sup>6+</sup>
460
461close(options: WebSocketCloseOptions, callback: AsyncCallback\<boolean\>): void
462
463根据可选参数code和reason,关闭WebSocket连接,使用callback方式作为异步方法。
464
465**需要权限**:ohos.permission.INTERNET
466
467**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
468
469**系统能力**:SystemCapability.Communication.NetStack
470
471**参数:**
472
473| 参数名   | 类型                     | 必填 | 说明                                                  |
474| -------- | ------------------------ | ---- | ----------------------------------------------------- |
475| options  | WebSocketCloseOptions    | 是   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
476| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                            |
477
478**错误码:**
479
480| 错误码ID | 错误信息                 |
481| ------- | ----------------------- |
482| 401     | Parameter error.        |
483| 201     | Permission denied.      |
484
485**示例:**
486
487```ts
488import { webSocket } from '@kit.NetworkKit';
489import { BusinessError } from '@kit.BasicServicesKit';
490
491let ws = webSocket.createWebSocket();
492
493let options: webSocket.WebSocketCloseOptions | undefined;
494if (options != undefined) {
495    options.code = 1000
496    options.reason = "your reason"
497}
498ws.close(options, (err: BusinessError) => {
499    if (!err) {
500        console.log("close success")
501    } else {
502        console.log("close fail, err is " + JSON.stringify(err))
503    }
504});
505```
506
507### close<sup>6+</sup>
508
509close(options?: WebSocketCloseOptions): Promise\<boolean\>
510
511根据可选参数code和reason,关闭WebSocket连接,使用Promise方式作为异步方法。
512
513**需要权限**:ohos.permission.INTERNET
514
515**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
516
517**系统能力**:SystemCapability.Communication.NetStack
518
519**参数:**
520
521| 参数名  | 类型                  | 必填 | 说明                                                  |
522| ------- | --------------------- | ---- | ----------------------------------------------------- |
523| options | WebSocketCloseOptions | 否   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
524
525**返回值:**
526
527| 类型               | 说明                              |
528| :----------------- | :-------------------------------- |
529| Promise\<boolean\> | 以Promise形式返回关闭连接的结果。 |
530
531**错误码:**
532
533| 错误码ID | 错误信息                 |
534| ------- | ----------------------- |
535| 401     | Parameter error.        |
536| 201     | Permission denied.      |
537
538**示例:**
539
540```ts
541import { webSocket } from '@kit.NetworkKit';
542
543let ws = webSocket.createWebSocket();
544let options: webSocket.WebSocketCloseOptions | undefined;
545if (options != undefined) {
546    options.code = 1000
547    options.reason = "your reason"
548}
549let promise = ws.close();
550promise.then((value: boolean) => {
551    console.log("close success")
552}).catch((err:string) => {
553    console.log("close fail, err is " + JSON.stringify(err))
554});
555```
556
557### on('open')<sup>6+</sup>
558
559on(type: 'open', callback: AsyncCallback\<Object\>): void
560
561订阅WebSocket的打开事件,使用callback方式作为异步方法。
562
563**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
564
565**系统能力**:SystemCapability.Communication.NetStack
566
567**参数:**
568
569| 参数名   | 类型                    | 必填 | 说明                          |
570| -------- | ----------------------- | ---- | ----------------------------- |
571| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
572| callback | AsyncCallback\<Object\> | 是   | 回调函数。                    |
573
574**示例:**
575
576```ts
577import { webSocket } from '@kit.NetworkKit';
578import { BusinessError, Callback } from '@kit.BasicServicesKit';
579
580let ws= webSocket.createWebSocket();
581class OutValue {
582  status: number = 0
583  message: string = ""
584}
585ws.on('open', (err: BusinessError, value: Object) => {
586  console.log("on open, status:" + (value as OutValue).status + ", message:" + (value as OutValue).message);
587});
588```
589
590### off('open')<sup>6+</sup>
591
592off(type: 'open', callback?: AsyncCallback\<Object\>): void
593
594取消订阅WebSocket的打开事件,使用callback方式作为异步方法。
595
596> **说明:**
597> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
598
599**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
600
601**系统能力**:SystemCapability.Communication.NetStack
602
603**参数:**
604
605| 参数名   | 类型                    | 必填 | 说明                          |
606| -------- | ----------------------- | ---- | ----------------------------- |
607| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
608| callback | AsyncCallback\<Object\> | 否   | 回调函数。                    |
609
610**示例:**
611
612```ts
613import { webSocket } from '@kit.NetworkKit';
614import { BusinessError } from '@kit.BasicServicesKit';
615
616let ws = webSocket.createWebSocket();
617class OutValue {
618  status: number = 0
619  message: string = ""
620}
621let callback1 = (err: BusinessError, value: Object) => {
622 console.log("on open, status:" + ((value as OutValue).status + ", message:" + (value as OutValue).message));
623}
624ws.on('open', callback1);
625// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅
626ws.off('open', callback1);
627```
628
629### on('message')<sup>6+</sup>
630
631on(type: 'message', callback: AsyncCallback\<string | ArrayBuffer\>): void
632
633订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。每个消息最大长度为4K,超过4K自动分片。
634
635> **说明:**
636> AsyncCallback中的数据可以是字符串(API 6)或ArrayBuffer(API 8)。
637
638**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
639
640**系统能力**:SystemCapability.Communication.NetStack
641
642**参数:**
643
644| 参数名   | 类型                    | 必填 | 说明                                         |
645| -------- | ----------------------- | ---- | -------------------------------------------- |
646| type     | string                  | 是   | 'message':WebSocket的接收到服务器消息事件。 |
647| callback | AsyncCallback\<string \| ArrayBuffer <sup>8+</sup>\> | 是   | 回调函数。                                   |
648
649**示例:**
650
651```ts
652import { webSocket } from '@kit.NetworkKit';
653import { BusinessError } from '@kit.BasicServicesKit';
654
655let ws = webSocket.createWebSocket();
656ws.on('message', (err: BusinessError<void>, value: string | ArrayBuffer) => {
657  console.log("on message, message:" + value);
658});
659```
660
661### off('message')<sup>6+</sup>
662
663off(type: 'message', callback?: AsyncCallback\<string | ArrayBuffer\>): void
664
665取消订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。每个消息最大长度为4K,超过4K自动分片。
666
667> **说明:**
668> AsyncCallback中的数据可以是字符串(API 6)或ArrayBuffer(API 8)。
669> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
670
671**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
672
673**系统能力**:SystemCapability.Communication.NetStack
674
675**参数:**
676
677| 参数名   | 类型                                                | 必填 | 说明                                         |
678| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
679| type     | string                                              | 是   | 'message':WebSocket的接收到服务器消息事件。 |
680| callback | AsyncCallback\<string \|ArrayBuffer <sup>8+</sup>\> | 否   | 回调函数。                                   |
681
682**示例:**
683
684```ts
685import { webSocket } from '@kit.NetworkKit';
686
687let ws = webSocket.createWebSocket();
688ws.off('message');
689```
690
691### on('close')<sup>6+</sup>
692
693on(type: 'close', callback: AsyncCallback\<CloseResult\>): void
694
695订阅WebSocket的关闭事件,使用callback方式作为异步方法。
696
697**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
698
699**系统能力**:SystemCapability.Communication.NetStack
700
701**参数:**
702
703| 参数名   | 类型                                            | 必填 | 说明                           |
704| -------- | ----------------------------------------------- | ---- | ------------------------------ |
705| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
706| callback | AsyncCallback\<CloseResult\> | 是   | 回调函数。<br>close:close错误码,reason:错误码说明 |
707
708**示例:**
709
710```ts
711import { webSocket } from '@kit.NetworkKit';
712import { BusinessError } from '@kit.BasicServicesKit';
713
714let ws = webSocket.createWebSocket();
715ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => {
716  console.log("on close, code is " + value.code + ", reason is " + value.reason);
717});
718```
719
720### off('close')<sup>6+</sup>
721
722off(type: 'close', callback?: AsyncCallback\<CloseResult\>): void
723
724取消订阅WebSocket的关闭事件,使用callback方式作为异步方法。
725
726> **说明:**
727> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
728
729**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
730
731**系统能力**:SystemCapability.Communication.NetStack
732
733**参数:**
734
735| 参数名   | 类型                                            | 必填 | 说明                           |
736| -------- | ----------------------------------------------- | ---- | ------------------------------ |
737| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
738| callback | AsyncCallback\<CloseResult\> | 否   | 回调函数。<br>close:close错误码,reason:错误码说明 |
739
740**示例:**
741
742```ts
743import { webSocket } from '@kit.NetworkKit';
744
745let ws = webSocket.createWebSocket();
746ws.off('close');
747```
748
749### on('error')<sup>6+</sup>
750
751on(type: 'error', callback: ErrorCallback): void
752
753订阅WebSocket的Error事件,使用callback方式作为异步方法。
754
755**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
756
757**系统能力**:SystemCapability.Communication.NetStack
758
759**参数:**
760
761| 参数名   | 类型          | 必填 | 说明                            |
762| -------- | ------------- | ---- | ------------------------------- |
763| type     | string        | 是   | 'error':WebSocket的Error事件。 |
764| callback | ErrorCallback | 是   | 回调函数。<br>常见错误码:200 |
765
766**示例:**
767
768```ts
769import { webSocket } from '@kit.NetworkKit';
770import { BusinessError } from '@kit.BasicServicesKit';
771
772let ws = webSocket.createWebSocket();
773ws.on('error', (err: BusinessError) => {
774  console.log("on error, error:" + JSON.stringify(err))
775});
776```
777
778### off('error')<sup>6+</sup>
779
780off(type: 'error', callback?: ErrorCallback): void
781
782取消订阅WebSocket的Error事件,使用callback方式作为异步方法。
783
784> **说明:**
785> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
786
787**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
788
789**系统能力**:SystemCapability.Communication.NetStack
790
791**参数:**
792
793| 参数名   | 类型          | 必填 | 说明                            |
794| -------- | ------------- | ---- | ------------------------------- |
795| type     | string        | 是   | 'error':WebSocket的Error事件。 |
796| callback | ErrorCallback | 否   | 回调函数。                      |
797
798**示例:**
799
800```ts
801import { webSocket } from '@kit.NetworkKit';
802
803let ws = webSocket.createWebSocket();
804ws.off('error');
805```
806
807### on('dataEnd')<sup>11+</sup>
808
809on(type: 'dataEnd', callback: Callback\<void\>): void
810
811订阅WebSocket的数据接收结束事件,使用callback方式作为异步方法。
812
813**系统能力**:SystemCapability.Communication.NetStack
814
815**参数:**
816
817| 参数名   |       类型        | 必填 |                  说明                   |
818| -------- | ---------------- | ---- | --------------------------------------- |
819| type     | string           | 是   | 'dataEnd':WebSocket的数据接收结束事件。 |
820| callback | Callback\<void\> | 是   | 回调函数。                              |
821
822**示例:**
823
824```ts
825import { webSocket } from '@kit.NetworkKit';
826
827let ws = webSocket.createWebSocket();
828ws.on('dataEnd', () => {
829  console.log("on dataEnd")
830});
831```
832
833### off('dataEnd')<sup>11+</sup>
834
835off(type: 'dataEnd', callback?: Callback\<void\>): void
836
837取消订阅WebSocket的数据接收结束事件,使用callback方式作为异步方法。
838
839> **说明:**
840> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
841
842**系统能力**:SystemCapability.Communication.NetStack
843
844**参数:**
845
846| 参数名   |        类型       | 必填 |                说明                    |
847| -------- | ---------------- | ---- | -------------------------------------- |
848| type     | string           | 是   | 'dataEnd':WebSocket的数据接收结束事件。|
849| callback | Callback\<void\> | 否   | 回调函数。                             |
850
851**示例:**
852
853```ts
854import { webSocket } from '@kit.NetworkKit';
855
856let ws = webSocket.createWebSocket();
857ws.off('dataEnd');
858```
859
860### on('headerReceive')<sup>12+</sup>
861
862on(type: 'headerReceive', callback: Callback\<ResponseHeaders\>): void
863
864订阅HTTP Response Header事件,使用callback方式作为同步方法。
865
866**系统能力**:SystemCapability.Communication.NetStack
867
868**参数:**
869
870| 参数名   |        类型       | 必填 |                说明                    |
871| -------- | ---------------- | ---- | -------------------------------------- |
872| type     | string           | 是   | 'headerReceive':WebSocket的headerReceive事件。|
873| callback | Callback\<ResponseHeaders\> | 是   | 回调函数,返回订阅事件。                             |
874
875**示例:**
876
877```ts
878import { webSocket } from '@kit.NetworkKit';
879
880let ws = webSocket.createWebSocket();
881ws.on('headerReceive', (data) => {
882  console.log("on headerReceive " + JSON.stringify(data));
883});
884```
885
886### off('headerReceive')<sup>12+</sup>
887
888off(type: 'headerReceive', callback?: Callback\<ResponseHeaders\>): void
889
890取消订阅HTTP Response Header事件,使用callback方式作为同步方法。
891
892> **说明:**
893> 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
894
895**系统能力**:SystemCapability.Communication.NetStack
896
897**参数:**
898
899| 参数名   |        类型       | 必填 |                说明                    |
900| -------- | ---------------- | ---- | -------------------------------------- |
901| type     | string           | 是   | 'headerReceive':WebSocket的headerReceive事件。|
902| callback | Callback\<ResponseHeaders\> | 否   | 回调函数,返回订阅事件。                           |
903
904**示例:**
905
906```ts
907import { webSocket } from '@kit.NetworkKit';
908
909let ws = webSocket.createWebSocket();
910ws.off('headerReceive');
911```
912
913## WebSocketRequestOptions
914
915建立WebSocket连接时,可选参数的类型和说明。
916
917**系统能力**:SystemCapability.Communication.NetStack
918
919| 名称 | 类型 |  只读  | 可选 | 说明                                                         |
920| ------ | ------ |------ | ---- | ------------------------------------------------------------ |
921| header | Object |  否  |  是   | 建立WebSocket连接可选参数,代表建立连接时携带的HTTP头信息。参数内容自定义,也可以不指定。<br>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
922| caPath<sup>11+</sup> | string |  否  |  是  | 如果设置了此参数,系统将使用用户指定路径的CA证书,(开发者需保证该路径下CA证书的可访问性),否则将使用系统预设CA证书,系统预设CA证书位置:/etc/ssl/certs/cacert.pem。证书路径为沙箱映射路径(开发者可通过Global.getContext().filesDir获取应用沙箱路径)。目前仅支持格式为pem的文本证书。 |
923| clientCert<sup>11+</sup> | [ClientCert](#clientcert11) |   否  |  是   | 支持传输客户端证书。 |
924| proxy<sup>12+</sup> | ProxyConfiguration |  否  | 是 | 通信过程中的代理信息,默认使用系统网络代理。 |
925| protocol<sup>12+</sup> | string |  否  | 是 | 自定义Sec-WebSocket-Protocol字段,默认为""。              |
926
927## ClientCert<sup>11+</sup>
928
929客户端证书类型。
930
931**系统能力**:SystemCapability.Communication.NetStack
932
933| 名称 | 类型   | 必填 | 说明                                                         |
934| ------ | ------ | ---- | ------------------------------------------------------------ |
935| certPath   | string  | 是   | 证书路径。 |
936| keyPath | string | 是   | 证书秘钥的路径。 |
937| keyPassword | string | 否   | 证书秘钥的密码。 |
938
939## ProxyConfiguration<sup>12+</sup>
940type ProxyConfiguration = 'system' | 'no-proxy' | HttpProxy
941
942网络代理配置信息
943
944**系统能力**:SystemCapability.Communication.NetStack
945
946|  类型   | 说明                      |
947| ------  |------------------------- |
948| 'system'   |  使用系统默认网络代理。 |
949| 'no-proxy' |  不使用网络代理。 |
950| [HttpProxy](js-apis-net-connection.md#httpproxy10)  | 使用指定的网络代理。 |
951
952## WebSocketCloseOptions
953
954关闭WebSocket连接时,可选参数的类型和说明。
955
956**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
957
958**系统能力**:SystemCapability.Communication.NetStack
959
960| 名称 | 类型   | 必填 | 说明                                                         |
961| ------ | ------ | ---- | ------------------------------------------------------------ |
962| code   | number | 否   | 错误码,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为1000。 |
963| reason | string | 否   | 原因值,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为空字符串("")。 |
964
965## CloseResult<sup>10+</sup>
966
967关闭WebSocket连接时,订阅close事件得到的关闭结果。
968
969**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
970
971**系统能力**:SystemCapability.Communication.NetStack
972
973| 名称 | 类型   | 必填 | 说明                                                         |
974| ------ | ------ | ---- | ------------------------------------------------------------ |
975| code   | number | 是   | 错误码,订阅close事件得到的关闭连接的错误码。 |
976| reason | string | 是   | 原因值,订阅close事件得到的关闭连接的错误原因。 |
977
978## ResponseHeaders<sup>12+</sup>
979type ResponseHeaders = {[k: string]: string | string[] | undefined;}
980
981服务器发送的响应头。
982
983**系统能力**:SystemCapability.Communication.NetStack
984
985| 类型   | 说明                                                         |
986| ------ | ------------------------------------------------------------ |
987| {[k:string]:string \| string[] \| undefined} | header数据类型为键值对、字符串或者undefined |
988
989## close错误码说明
990
991发送给服务端的错误码可以自行定义,下面的列表仅供参考。
992
993**系统能力**:SystemCapability.Communication.NetStack
994
995| 值        | 说明               |
996| :-------- | :----------------- |
997| 1000      | 正常关闭           |
998| 1001      | 服务器主动关闭     |
999| 1002      | 协议错误           |
1000| 1003      | 无法处理的数据类型 |
1001| 1004~1015 | 保留值             |
1002