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