【开发实录】在HarmonyOS鸿蒙Next开发板上使用websocket(移植自librws库)

【开发实录】在HarmonyOS鸿蒙Next开发板上使用websocket(移植自librws库) librws: Tiny, cross platform websocket client C library
相关代码可在下面下载,也可进入gitee.com查看

技术有限,如有错误还望不吝赐教。

基础:完成官方的快速入门教程

虽然在web双向通信中,除了使用ajax(单向轮询)外,一般都推荐websocket,但网上关于websocket的实现代码很少,而且大部分为js和java,很少有C语言。因为课程项目开发需要使用到websocket,就在网上寻找了挺久的,终于找到了这个库。相对于其他库来说,这个库需要跨平台的代码都用了一层适配层,而且没有用到其他例如libevent等其他库,用他的话说就是"No additional dependecies",所以移植挺方便的。然后因为这个库除了windows平台外,其他平台都是使用POSIX接口,而Hi_3861上只有POSIX的声明,但并没有实现。所以适配相关的函数以及处理一些小细节。

这篇文章主要介绍如何使用,下一篇可能会介绍如何移植,

1、向项目中导入此库

下载下面的librws资源放至//third_party目录下,然后在//vendor/hisi/hi3861/hi3861/BUILD.gn文件中的lite_component(“sdk”)–>deps下添加 “//third_party/librws:librws_static” 这样就可以在下次编译时将相关代码编译成库放进项目内了。

2、编写应用代码

先使用板子连接上wifi,具体操作可查看Hi3861 WiFi操作,热点连接-鸿蒙HarmonyOS技术社区-官方战略合作伙伴-51CTO.COM,需要注意,连接WiFi后要sleep一段时间。下面资源有相关代码。

然后配置相关信息

  rws_socket _socket = NULL;
  _socket = rws_socket_create();

  rws_socket_set_scheme(_socket, "ws");
  rws_socket_set_host(_socket, "192.168.1.103");
  rws_socket_set_port(_socket, 7777);
  rws_socket_set_path(_socket, "/ws");

注意配置信息一定要对应真实信息,下面我会分享我的websocket服务端测试代码。

然后配置回调函数

// 因主动或者出现错误时,断开连接的回调函数
static void on_socket_disconnected(rws_socket socket) {
  // process error
  rws_error error = rws_socket_get_error(socket);
  if (error) { 
    printf("Socket disconnect with code, error: %i, %s\n", rws_error_get_code(error), rws_error_get_description(error)); 
  }
  // forget about this socket object, due to next disconnection sequence
  socket = NULL;
}

// 建立链接完成后的回调函数
static void on_socket_connected(rws_socket socket) {
  (void) socket;
  printf("Socket connected\n");
}

// 接受到信息的回调函数
static void on_socket_received_text(rws_socket socket, const char * text, const unsigned int length) {
  (void) socket;
  char *buff[128] = {0};
  memcpy_s(buff, 128, text, length);
  printf("Socket text: %s\n", buff);
}

// 设置回调函数
rws_socket_set_on_disconnected(_socket, &on_socket_disconnected); // required
rws_socket_set_on_connected(_socket, &on_socket_connected);
rws_socket_set_on_received_text(_socket, &on_socket_received_text);

需要注意一个地方,在接受信息回调函数中,原仓库的测试代码是直接打印text,但测试发现,text变量除了接受到的信息还会包括一部分乱码,所以使用了memcpy_s函数复制有效的信息在打印。大家编写接受回调函数时需要注意这个地方。

接下来就是连接,发送消息以及关闭了

  printf("[RWS]ready to connect\n");
  rws_bool res = rws_socket_connect(_socket);
  if(res == rws_false) {
    printf("[RWS]error connect\n");
    exit(1);
  }
  sleep(2);
  const char * example_text = "hello world";
  printf("[RWS]ready to send msg\n");
  rws_socket_send_text(_socket, example_text);
  sleep(2);
  printf("[RWS]ready to disconnect\n");
  rws_socket_disconnect_and_release(_socket);
  _socket = NULL;
  return;

3、测试代码

服务器代码使用的是golang,详细代码在下方下载。在代码文件当前目录运行命令:

go run server.go

4、其他文章

作者:OSAaaa


更多关于【开发实录】在HarmonyOS鸿蒙Next开发板上使用websocket(移植自librws库)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

在HarmonyOS鸿蒙Next开发板上使用WebSocket(移植自librws库)的开发实录中,WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务器和客户端之间进行实时数据交换。librws是一个轻量级的WebSocket库,适用于嵌入式系统。移植librws库到鸿蒙Next开发板的主要步骤包括:

  1. 环境准备:确保鸿蒙Next开发板的开发环境已配置完成,包括必要的编译工具链和SDK。

  2. 获取librws库源码:从官方仓库或开源社区获取librws库的源代码。

  3. 代码移植:将librws库的代码适配到鸿蒙系统,主要涉及系统调用、内存管理、网络接口等方面的修改,确保其能够在鸿蒙系统上编译和运行。

  4. 编译与链接:使用鸿蒙的编译工具链编译移植后的librws库,并将其链接到应用程序中。

  5. 测试与验证:编写测试用例,验证WebSocket功能在鸿蒙Next开发板上的正常运行,包括连接建立、数据传输、连接关闭等操作。

  6. 优化与调试:根据测试结果进行性能优化和问题调试,确保WebSocket通信的稳定性和效率。

通过以上步骤,可以在鸿蒙Next开发板上成功使用移植自librws库的WebSocket功能,实现实时通信。

更多关于【开发实录】在HarmonyOS鸿蒙Next开发板上使用websocket(移植自librws库)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next开发板上使用WebSocket,可以通过移植librws库实现。首先,下载并编译librws库,确保其与鸿蒙系统的兼容性。接着,在鸿蒙项目中引入librws库的头文件和库文件。然后,初始化WebSocket连接,设置回调函数处理接收到的消息。最后,通过调用librws提供的API实现WebSocket的发送和接收功能。确保在鸿蒙的配置文件中正确设置网络权限,以保障WebSocket的正常通信。

回到顶部