• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# WebSocket连接
2
3>![](public_sys-resources/icon-note.gif) **说明:**
4>本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
5>
6
7使用WebSocket建立服务器与客户端的双向连接,需要先通过[createWebSocket](#websocketcreatewebsocket)方法创建[WebSocket](#websocket)对象,然后通过[connect](#connect)方法连接到服务器。当连接成功后,客户端会收到[open](#onopen)事件的回调,之后客户端就可以通过[send](#send)方法与服务器进行通信。当服务器发信息给客户端时,客户端会收到[message](#onmessage)事件的回调。当客户端不要此连接时,可以通过调用[close](#close)方法主动断开连接,之后客户端会收到[close](#onclose)事件的回调。
8
9若在上述任一过程中发生错误,客户端会收到[error](#onerror)事件的回调。
10
11
12## 导入模块
13
14```js
15import webSocket from '@ohos.net.webSocket';
16```
17
18## 完整示例
19
20```js
21import webSocket from '@ohos.net.webSocket';
22
23var defaultIpAddress = "ws://";
24let ws = webSocket.createWebSocket();
25ws.on('open', (err, value) => {
26    console.log("on open, status:" + value['status'] + ", message:" + value['message']);
27    // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
28    ws.send("Hello, server!", (err, value) => {
29        if (!err) {
30            console.log("send success");
31        } else {
32            console.log("send fail, err:" + JSON.stringify(err));
33        }
34    });
35});
36ws.on('message', (err, value) => {
37    console.log("on message, message:" + value);
38    // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
39    if (value === 'bye') {
40        ws.close((err, value) => {
41            if (!err) {
42                console.log("close success");
43            } else {
44                console.log("close fail, err is " + JSON.stringify(err));
45            }
46        });
47    }
48});
49ws.on('close', (err, value) => {
50    console.log("on close, code is " + value.code + ", reason is " + value.reason);
51});
52ws.on('error', (err) => {
53    console.log("on error, error:" + JSON.stringify(err));
54});
55ws.connect(defaultIpAddress, (err, value) => {
56    if (!err) {
57        console.log("connect success");
58    } else {
59        console.log("connect fail, err:" + JSON.stringify(err));
60    }
61});
62```
63
64## webSocket.createWebSocket
65
66createWebSocket\(\): WebSocket
67
68创建一个WebSocket,里面包括建立连接、关闭连接、发送数据和订阅/取消订阅WebSocket连接的打开事件、接收到服务器消息事件、关闭事件和错误事件。
69
70**系统能力**:SystemCapability.Communication.NetStack
71
72**返回值:**
73
74| 类型                                | 说明                                                         |
75| :---------------------------------- | :----------------------------------------------------------- |
76| [WebSocket](#websocket) | 返回一个WebSocket对象,里面包括connect、send、close、on和off方法。 |
77
78**示例:**
79
80```js
81let ws = webSocket.createWebSocket();
82```
83
84
85## WebSocket
86
87在调用WebSocket的方法前,需要先通过[webSocket.createWebSocket](#websocketcreatewebsocket)创建一个WebSocket。
88
89### connect
90
91connect\(url: string, callback: AsyncCallback<boolean\>\): void
92
93根据URL地址,建立一个WebSocket连接,使用callback方式作为异步方法。
94
95**需要权限**:ohos.permission.INTERNET
96
97**系统能力**:SystemCapability.Communication.NetStack
98
99**参数:**
100
101| 参数名   | 类型                     | 必填 | 说明                         |
102| -------- | ------------------------ | ---- | ---------------------------- |
103| url      | string                   | 是   | 建立WebSocket连接的URL地址。 |
104| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                   |
105
106
107**示例:**
108
109```js
110let ws = webSocket.createWebSocket();
111let url = "ws://"
112ws.connect(url, (err, value) => {
113	if (!err) {
114		console.log("connect success");
115	} else {
116		console.log("connect fail, err:" + JSON.stringify(err))
117	}
118});
119```
120
121
122### connect
123
124connect\(url: string, options: WebSocketRequestOptions, callback: AsyncCallback<boolean\>\): void
125
126根据URL地址和header,建立一个WebSocket连接,使用callback方式作为异步方法。
127
128**需要权限**:ohos.permission.INTERNET
129
130**系统能力**:SystemCapability.Communication.NetStack
131
132**参数:**
133
134| 参数名   | 类型                     | 必填 | 说明                                                    |
135| -------- | ------------------------ | ---- | ------------------------------------------------------- |
136| url      | string                   | 是   | 建立WebSocket连接的URL地址。                            |
137| options  | WebSocketRequestOptions  | 是   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
138| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                              |
139
140
141**示例:**
142
143```js
144let ws = webSocket.createWebSocket();
145let url = "ws://"
146ws.connect(url, {
147	header: {
148		"key": "value",
149		"key2": "value2"
150	}
151}, (err, value) => {
152	if (!err) {
153		console.log("connect success");
154	} else {
155		console.log("connect fail, err:" + JSON.stringify(err))
156	}
157});
158```
159
160
161### connect
162
163connect\(url: string, options?: WebSocketRequestOptions\): Promise<boolean\>
164
165根据URL地址和header,建立一个WebSocket连接,使用Promise方式作为异步方法。
166
167**需要权限**:ohos.permission.INTERNET
168
169**系统能力**:SystemCapability.Communication.NetStack
170
171**参数:**
172
173| 参数名  | 类型                    | 必填 | 说明                                                    |
174| ------- | ----------------------- | ---- | ------------------------------------------------------- |
175| url     | string                  | 是   | 建立WebSocket连接的URL地址。                            |
176| options | WebSocketRequestOptions | 否   | 参考[WebSocketRequestOptions](#websocketrequestoptions)。 |
177
178**返回值:**
179
180| 类型               | 说明                              |
181| :----------------- | :-------------------------------- |
182| Promise\<boolean\> | 以Promise形式返回建立连接的结果。 |
183
184**示例:**
185
186```js
187let ws = webSocket.createWebSocket();
188let url = "ws://"
189let promise = ws.connect(url);
190promise.then((value) => {
191	console.log("connect success")
192}).catch((err) => {
193	console.log("connect fail, error:" + JSON.stringify(err))
194});
195```
196
197
198### send
199
200send\(data: string | ArrayBuffer, callback: AsyncCallback<boolean\>\): void
201
202通过WebSocket连接发送数据,使用callback方式作为异步方法。
203
204**需要权限**:ohos.permission.INTERNET
205
206**系统能力**:SystemCapability.Communication.NetStack
207
208**参数:**
209
210| 参数名   | 类型                     | 必填 | 说明         |
211| -------- | ------------------------ | ---- | ------------ |
212| data     | string \| ArrayBuffer <sup>8+</sup> | 是   | 发送的数据。 |
213| callback | AsyncCallback\<boolean\> | 是   | 回调函数。   |
214
215**示例:**
216
217```js
218let ws = webSocket.createWebSocket();
219let url = "ws://"
220ws.connect(url, (err, value) => {
221	ws.send("Hello, server!", (err, value) => {
222		if (!err) {
223			console.log("send success");
224		} else {
225			console.log("send fail, err:" + JSON.stringify(err))
226		}
227	});
228});
229```
230
231
232### send
233
234send\(data: string | ArrayBuffer\): Promise<boolean\>
235
236通过WebSocket连接发送数据,使用Promise方式作为异步方法。
237
238**需要权限**:ohos.permission.INTERNET
239
240**系统能力**:SystemCapability.Communication.NetStack
241
242**参数:**
243
244| 参数名 | 类型   | 必填 | 说明         |
245| ------ | ------ | ---- | ------------ |
246| data     | string \| ArrayBuffer <sup>8+</sup> | 是   | 发送的数据。 |
247
248**返回值:**
249
250| 类型               | 说明                              |
251| :----------------- | :-------------------------------- |
252| Promise\<boolean\> | 以Promise形式返回发送数据的结果。 |
253
254**示例:**
255
256```js
257let ws = webSocket.createWebSocket();
258let url = "ws://"
259ws.connect(url, (err, value) => {
260	let promise = ws.send("Hello, server!");
261	promise.then((value) => {
262		console.log("send success")
263	}).catch((err) => {
264		console.log("send fail, error:" + JSON.stringify(err))
265	});
266});
267```
268
269
270### close
271
272close\(callback: AsyncCallback<boolean\>\): void
273
274关闭WebSocket连接,使用callback方式作为异步方法。
275
276**需要权限**:ohos.permission.INTERNET
277
278**系统能力**:SystemCapability.Communication.NetStack
279
280**参数:**
281
282| 参数名   | 类型                     | 必填 | 说明       |
283| -------- | ------------------------ | ---- | ---------- |
284| callback | AsyncCallback\<boolean\> | 是   | 回调函数。 |
285
286**示例:**
287
288```js
289let ws = webSocket.createWebSocket();
290let url = "ws://"
291ws.close((err, value) => {
292	if (!err) {
293		console.log("close success")
294	} else {
295		console.log("close fail, err is " + JSON.stringify(err))
296	}
297});
298```
299
300
301### close
302
303close\(options: WebSocketCloseOptions, callback: AsyncCallback<boolean\>\): void
304
305根据可选参数code和reason,关闭WebSocket连接,使用callback方式作为异步方法。
306
307**需要权限**:ohos.permission.INTERNET
308
309**系统能力**:SystemCapability.Communication.NetStack
310
311**参数:**
312
313| 参数名   | 类型                     | 必填 | 说明                                                  |
314| -------- | ------------------------ | ---- | ----------------------------------------------------- |
315| options  | WebSocketCloseOptions    | 是   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
316| callback | AsyncCallback\<boolean\> | 是   | 回调函数。                                            |
317
318**示例:**
319
320```js
321let ws = webSocket.createWebSocket();
322let url = "ws://"
323ws.close({
324	code: 1000,
325	reason: "your reason"
326}, (err, value) => {
327	if (!err) {
328		console.log("close success")
329	} else {
330		console.log("close fail, err is " + JSON.stringify(err))
331	}
332});
333```
334
335
336### close
337
338close\(options?: WebSocketCloseOptions\): Promise<boolean\>
339
340根据可选参数code和reason,关闭WebSocket连接,使用Promise方式作为异步方法。
341
342**需要权限**:ohos.permission.INTERNET
343
344**系统能力**:SystemCapability.Communication.NetStack
345
346**参数:**
347
348| 参数名  | 类型                  | 必填 | 说明                                                  |
349| ------- | --------------------- | ---- | ----------------------------------------------------- |
350| options | WebSocketCloseOptions | 否   | 参考[WebSocketCloseOptions](#websocketcloseoptions)。 |
351
352**返回值:**
353
354| 类型               | 说明                              |
355| :----------------- | :-------------------------------- |
356| Promise\<boolean\> | 以Promise形式返回关闭连接的结果。 |
357
358**示例:**
359
360```js
361let ws = webSocket.createWebSocket();
362let url = "ws://"
363let promise = ws.close({
364	code: 1000,
365	reason: "your reason"
366});
367promise.then((value) => {
368	console.log("close success")
369}).catch((err) => {
370	console.log("close fail, err is " + JSON.stringify(err))
371});
372```
373
374
375### on\('open'\)
376
377on\(type: 'open', callback: AsyncCallback<Object\>\): void
378
379订阅WebSocket的打开事件,使用callback方式作为异步方法。
380
381**系统能力**:SystemCapability.Communication.NetStack
382
383**参数:**
384
385| 参数名   | 类型                    | 必填 | 说明                          |
386| -------- | ----------------------- | ---- | ----------------------------- |
387| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
388| callback | AsyncCallback\<Object\> | 是   | 回调函数。                    |
389
390
391**示例:**
392
393```js
394let ws = webSocket.createWebSocket();
395ws.on('open', (err, value) => {
396	console.log("on open, status:" + value['status'] + ", message:" + value['message']);
397});
398```
399
400
401### off\('open'\)
402
403off\(type: 'open', callback?: AsyncCallback<Object\>\): void
404
405取消订阅WebSocket的打开事件,使用callback方式作为异步方法。
406
407>![](public_sys-resources/icon-note.gif) **说明:**
408>可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
409
410**系统能力**:SystemCapability.Communication.NetStack
411
412**参数:**
413
414| 参数名   | 类型                    | 必填 | 说明                          |
415| -------- | ----------------------- | ---- | ----------------------------- |
416| type     | string                  | 是   | 'open':WebSocket的打开事件。 |
417| callback | AsyncCallback\<Object\> | 否   | 回调函数。                    |
418
419**示例:**
420
421```js
422let ws = webSocket.createWebSocket();
423let callback1 = (err, value) => {
424	console.log("on open, status:" + value['status'] + ", message:" + value['message']);
425}
426ws.on('open', callback1);
427// 可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅
428ws.off('open', callback1);
429```
430
431
432### on\('message'\)
433
434on\(type: 'message', callback: AsyncCallback<string | ArrayBuffer\>\): void
435
436订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。
437
438>![](public_sys-resources/icon-note.gif) **说明:**
439>AsyncCallback中的数据可以是字符串\(API 6\)或ArrayBuffer\(API 8\)。
440
441**系统能力**:SystemCapability.Communication.NetStack
442
443**参数:**
444
445| 参数名   | 类型                    | 必填 | 说明                                         |
446| -------- | ----------------------- | ---- | -------------------------------------------- |
447| type     | string                  | 是   | 'message':WebSocket的接收到服务器消息事件。 |
448| callback | AsyncCallback\<string \| ArrayBuffer <sup>8+</sup>\> | 是   | 回调函数。                                   |
449
450
451**示例:**
452
453```js
454let ws = webSocket.createWebSocket();
455ws.on('message', (err, value) => {
456	console.log("on message, message:" + value);
457});
458```
459
460
461### off\('message'\)
462
463off\(type: 'message', callback?: AsyncCallback<string | ArrayBuffer\>\): void
464
465取消订阅WebSocket的接收到服务器消息事件,使用callback方式作为异步方法。
466
467>![](public_sys-resources/icon-note.gif) **说明:**
468>AsyncCallback中的数据可以是字符串\(API 6\)或ArrayBuffer\(API 8\)。
469>可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
470
471**系统能力**:SystemCapability.Communication.NetStack
472
473**参数:**
474
475| 参数名   | 类型                                                | 必填 | 说明                                         |
476| -------- | --------------------------------------------------- | ---- | -------------------------------------------- |
477| type     | string                                              | 是   | 'message':WebSocket的接收到服务器消息事件。 |
478| callback | AsyncCallback\<string \|ArrayBuffer <sup>8+</sup>\> | 否   | 回调函数。                                   |
479
480**示例:**
481
482```js
483let ws = webSocket.createWebSocket();
484ws.off('message');
485```
486
487
488### on\('close'\)
489
490on\(type: 'close', callback: AsyncCallback<\{ code: number, reason: string \}\>\): void
491
492订阅WebSocket的关闭事件,使用callback方式作为异步方法。
493
494**系统能力**:SystemCapability.Communication.NetStack
495
496**参数:**
497
498| 参数名   | 类型                                            | 必填 | 说明                           |
499| -------- | ----------------------------------------------- | ---- | ------------------------------ |
500| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
501| callback | AsyncCallback<{ code: number, reason: string }> | 是   | 回调函数。                     |
502
503**示例:**
504
505```js
506let ws = webSocket.createWebSocket();
507ws.on('close', (err, value) => {
508	console.log("on close, code is " + value.code + ", reason is " + value.reason);
509});
510```
511
512
513### off\('close'\)
514
515off\(type: 'close', callback?: AsyncCallback<\{ code: number, reason: string \}\>\): void
516
517取消订阅WebSocket的关闭事件,使用callback方式作为异步方法。
518
519>![](public_sys-resources/icon-note.gif) **说明:**
520>可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
521
522**系统能力**:SystemCapability.Communication.NetStack
523
524**参数:**
525
526| 参数名   | 类型                                            | 必填 | 说明                           |
527| -------- | ----------------------------------------------- | ---- | ------------------------------ |
528| type     | string                                          | 是   | 'close':WebSocket的关闭事件。 |
529| callback | AsyncCallback<{ code: number, reason: string }> | 否   | 回调函数。                     |
530
531
532**示例:**
533
534```js
535let ws = webSocket.createWebSocket();
536ws.off('close');
537```
538
539
540### on\('error'\)
541
542on\(type: 'error', callback: ErrorCallback\): void
543
544订阅WebSocket的Error事件,使用callback方式作为异步方法。
545
546**系统能力**:SystemCapability.Communication.NetStack
547
548**参数:**
549
550| 参数名   | 类型          | 必填 | 说明                            |
551| -------- | ------------- | ---- | ------------------------------- |
552| type     | string        | 是   | 'error':WebSocket的Error事件。 |
553| callback | ErrorCallback | 是   | 回调函数。                      |
554
555
556**示例:**
557
558```js
559let ws = webSocket.createWebSocket();
560ws.on('error', (err) => {
561	console.log("on error, error:" + JSON.stringify(err))
562});
563```
564
565
566### off\('error'\)
567
568off\(type: 'error', callback?: ErrorCallback\): void
569
570取消订阅WebSocket的Error事件,使用callback方式作为异步方法。
571
572>![](public_sys-resources/icon-note.gif) **说明:**
573>可以指定传入on中的callback取消一个订阅,也可以不指定callback清空所有订阅。
574
575**系统能力**:SystemCapability.Communication.NetStack
576
577**参数:**
578
579| 参数名   | 类型          | 必填 | 说明                            |
580| -------- | ------------- | ---- | ------------------------------- |
581| type     | string        | 是   | 'error':WebSocket的Error事件。 |
582| callback | ErrorCallback | 否   | 回调函数。                      |
583
584**示例:**
585
586```js
587let ws = webSocket.createWebSocket();
588ws.off('error');
589```
590
591
592## WebSocketRequestOptions
593
594建立WebSocket连接时,可选参数的类型和说明。
595
596**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.NetStack597
598| 参数名 | 类型   | 必填 | 说明                                                         |
599| ------ | ------ | ---- | ------------------------------------------------------------ |
600| header | Object | 否   | 建立WebSocket连接可选参数,代表建立连接时携带的HTTP头信息。参数内容自定义,也可以不指定。 |
601
602
603## WebSocketCloseOptions
604
605关闭WebSocket连接时,可选参数的类型和说明。
606
607**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.NetStack608
609| 参数名 | 类型   | 必填 | 说明                                                         |
610| ------ | ------ | ---- | ------------------------------------------------------------ |
611| code   | number | 否   | 错误码,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为1000。 |
612| reason | string | 否   | 原因值,关闭WebSocket连接时的可选参数,可根据实际情况来填。默认值为空字符串("")。 |
613
614## close错误码说明
615
616发送给服务端的错误码可以自行定义,下面的列表仅供参考。
617
618**系统能力**:以下各项对应的系统能力均为SystemCapability.Communication.NetStack619
620| 值        | 说明               |
621| :-------- | :----------------- |
622| 1000      | 正常关闭           |
623| 1001      | 服务器主动关闭     |
624| 1002      | 协议错误           |
625| 1003      | 无法处理的数据类型 |
626| 1004~1015 | 保留值             |
627
628