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