arkts使用websocket测试

216 阅读2分钟

介绍

@ohos.net.webSocket (WebSocket连接)

说明:

本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

使用WebSocket建立服务器与客户端的双向连接,需要先通过createWebSocket方法创建WebSocket对象,然后通过connect方法连接到服务器。 当连接成功后,客户端会收到open事件的回调,之后客户端就可以通过send方法与服务器进行通信。 当服务器发信息给客户端时,客户端会收到message事件的回调。当客户端不要此连接时,可以通过调用close方法主动断开连接,之后客户端会收到close事件的回调。

导包

import webSocket from '@ohos.net.webSocket';

测试代码

export function testWebsocket() {
  let defaultIpAddress = "ws://192.168.110.1:8765";
  let ws = webSocket.createWebSocket();
  ws.on('open', (err: BusinessError, value: Object) => {
    if (err != undefined) {
      console.log(JSON.stringify(err));
      return;
    }
    // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
    ws.send("Hello, server!", (err: BusinessError, value: boolean) => {
      if (!err) {
        console.log("send success");
      } else {
        console.log("send fail, err:" + JSON.stringify(err));
      }
    });
  });
  ws.on('message', (err: BusinessError, data: Object) => {
    console.log("on message, message:" + data);
    // 当收到服务器的`bye`消息时(此消息字段仅为示意,具体字段需要与服务器协商),主动断开连接
    if (data.toString() === 'bye') {
      ws.close((err: BusinessError, value: boolean) => {
        if (!err) {
          console.log("close success");
        } else {
          console.log("close fail, err is " + 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("connect success");
    } else {
      console.log("connect fail, err:" + JSON.stringify(err));
    }
    ws.close((err: BusinessError) => {
      if (!err) {
        console.log("close success");
      } else {
        console.log("close fail, err is " + JSON.stringify(err));
      }
    });
  });
}

测试页面代码

import { testWebsocket } from '../common/websocket'

@Entry
@Component
struct SocketTest {


  build() {
    Row() {
      Column() {

        Button('websocket test')
          .onClick(()=>{
            testWebsocket()
          })
      }
      .width('100%')
    }
    .height('100%')
  }
}

image.png

测试成功

服务器端代码使用python编写

python安装第三方包 pip install websockets

def webSocketServer():
    import asyncio
    import websockets

    async def echo(websocket, path):
        async for message in websocket:
            print(f"Received message: {message}")
            await websocket.send(f"Echo: {message}")

    start_server = websockets.serve(echo, "192.168.110.1", 8765)
    print('start websocket......')
    asyncio.get_event_loop().run_until_complete(start_server)
    asyncio.get_event_loop().run_forever()

image.png

192.168.110.1是我局域网虚拟机的ip地址,是测试用的,正常生成的时候应该换上公网的域名