# WebSocket连接 ## åœºæ™¯ä»‹ç» ä½¿ç”¨WebSocket建立æœåŠ¡å™¨ä¸Žå®¢æˆ·ç«¯çš„åŒå‘连接,需è¦å…ˆé€šè¿‡createWebSocket()方法创建WebSocket对象,然åŽé€šè¿‡connect()方法连接到æœåŠ¡å™¨ã€‚å½“è¿žæŽ¥æˆåŠŸåŽï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°open事件的回调,之åŽå®¢æˆ·ç«¯å°±å¯ä»¥é€šè¿‡send()方法与æœåŠ¡å™¨è¿›è¡Œé€šä¿¡ã€‚å½“æœåС噍å‘ä¿¡æ¯ç»™å®¢æˆ·ç«¯æ—¶ï¼Œå®¢æˆ·ç«¯ä¼šæ”¶åˆ°message事件的回调。当客户端ä¸è¦æ¤è¿žæŽ¥æ—¶ï¼Œå¯ä»¥é€šè¿‡è°ƒç”¨close()方法主动æ–开连接,之åŽå®¢æˆ·ç«¯ä¼šæ”¶åˆ°close事件的回调。 若在上述任一过程ä¸å‘生错误,客户端会收到error事件的回调。 websocket支æŒå¿ƒè·³æ£€æµ‹æœºåˆ¶ï¼Œåœ¨å®¢æˆ·ç«¯å’ŒæœåŠ¡ç«¯å»ºç«‹WebSocket连接之åŽï¼Œæ¯é—´éš”一段时间会客户端会å‘é€Ping帧给æœåŠ¡å™¨ï¼ŒæœåŠ¡å™¨æ”¶åˆ°åŽåº”ç«‹å³å›žå¤Pong帧。 ## 接å£è¯´æ˜Ž WebSocket连接功能主è¦ç”±[webSocket模å—](../reference/apis-network-kit/js-apis-webSocket.md)æä¾›ã€‚使用该功能需è¦ç”³è¯·ohos.permission.INTERNETæƒé™ã€‚具体接å£è¯´æ˜Žå¦‚下表。 | 接å£å | æè¿° | | ------------------ | ----------------------------------------- | | createWebSocket() | 创建一个WebSocket连接。 | | connect() | æ ¹æ®URL地å€ï¼Œå»ºç«‹ä¸€ä¸ªWebSocket连接。 | | send() | 通过WebSocket连接å‘逿•°æ®ã€‚ | | close() | å…³é—WebSocket连接。 | | on(type: 'open') | 订阅WebSocket的打开事件。 | | off(type: 'open') | å–æ¶ˆè®¢é˜…WebSocket的打开事件。 | | on(type: 'message') | 订阅WebSocket的接收到æœåŠ¡å™¨æ¶ˆæ¯äº‹ä»¶ã€‚ | | off(type: 'message') | å–æ¶ˆè®¢é˜…WebSocket的接收到æœåŠ¡å™¨æ¶ˆæ¯äº‹ä»¶ã€‚ | | on(type: 'close') | 订阅WebSocket的关é—事件。 | | off(type: 'close') | å–æ¶ˆè®¢é˜…WebSocket的关é—事件 | | on(type: 'error') | 订阅WebSocketçš„Error事件。 | | off(type: 'error') | å–æ¶ˆè®¢é˜…WebSocketçš„Error事件。 | ## 开呿¥éª¤ 1. 导入需è¦çš„webSocket模å—。 2. 创建一个WebSocket连接,返回一个WebSocket对象。 3. (å¯é€‰ï¼‰è®¢é˜…WebSocketçš„æ‰“å¼€ã€æ¶ˆæ¯æŽ¥æ”¶ã€å…³é—ã€Error事件。 4. æ ¹æ®URL地å€ï¼Œå‘èµ·WebSocket连接。 5. 使用完WebSocket连接之åŽï¼Œä¸»åЍæ–开连接。 ```js import { webSocket } from '@kit.NetworkKit'; import { BusinessError } from '@kit.BasicServicesKit'; let defaultIpAddress = "ws://"; let ws = webSocket.createWebSocket(); ws.on('open', (err: BusinessError, value: Object) => { console.log("on open, status:" + JSON.stringify(value)); // 当收到on('open')事件时,å¯ä»¥é€šè¿‡send()方法与æœåŠ¡å™¨è¿›è¡Œé€šä¿¡ ws.send("Hello, server!", (err: BusinessError, value: boolean) => { if (!err) { console.log("Message send successfully"); } else { console.log("Failed to send the message. Err:" + JSON.stringify(err)); } }); }); ws.on('message', (err: BusinessError, value: string | ArrayBuffer) => { console.log("on message, message:" + value); // 当收到æœåŠ¡å™¨çš„`bye`æ¶ˆæ¯æ—¶ï¼ˆæ¤æ¶ˆæ¯å—段仅为示æ„ï¼Œå…·ä½“å—æ®µéœ€è¦ä¸ŽæœåС噍å商),主动æ–开连接 if (value === 'bye') { ws.close((err: BusinessError, value: boolean) => { if (!err) { console.log("Connection closed successfully"); } else { console.log("Failed to close the connection. Err: " + JSON.stringify(err)); } }); } }); ws.on('close', (err: BusinessError, value: webSocket.CloseResult) => { console.log("on close, code is " + value.code + ", reason is " + value.reason); }); ws.on('error', (err: BusinessError) => { console.log("on error, error:" + JSON.stringify(err)); }); ws.connect(defaultIpAddress, (err: BusinessError, value: boolean) => { if (!err) { console.log("Connected successfully"); } else { console.log("Connection failed. Err:" + JSON.stringify(err)); } }); ``` ## 相关实例 针对WebSocket连接的开å‘,有以下相关实例å¯ä¾›å‚考: - [WebSocket(ArkTS)(API9)](https://gitee.com/openharmony/applications_app_samples/tree/master/code/BasicFeature/Connectivity/WebSocket)