摘要:Librws是一个跨平台的websocket客户端,使用C语言编写。

本文分享自华为云社区《LiteOS组件尝鲜-玩转Librws》,作者: W922 。

本期小编为大家带来LiteOS开源版本Librws 组件的使用说明,请跟随小编的步伐一起进入探索之旅吧!

基本介绍

Librws是一个跨平台的websocket客户端,使用C语言编写。它有如下特点:

  • 无其他依赖关系
  • 带有公共方法的单独的公共方法库librws.h
  • 线程安全
  • 后台线程中的发送/接收逻辑

详情参考:https://github.com/OlehKulykov/librws。

WebSocket是一种在单个TCP连接上进行全双工通信的协议。

详情参考:https://baike.baidu.com/item/WebSocket/1953845?fr=aladdin。

使能Librws Demo

  • 在LiteOS源码根目录下根据实际使用的开发板,拷贝tools/build/config/目录下的默认配置文件${platform}.config到根目录,并重命名为.config

注意:根据Librws所需资源,暂时只支持在STM32F769开发板上运行LibrwsDemo。

  • 在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径使能Librws Demo
Demos  --->
Librws Demo --->
[*] Enable Librws Demo

注意:使能Librws Demo后会自动使能Librws组件和LWIP。

  • 保存退出后,会从github上自动下载Librws源代码,并从gitee上下载适配于LiteOS系统的patch包,并打入patch。详细流程在components/download.sh文件中。

注意: 下载需要Linux主机可以访问互联网,并安装git。

编译运行Librws Demo

服务端配置

服务端代码路径为LiteOS/demos/librws/websocketserver.py,需要python3环境可运行。启动服务端步骤如下(命令行操作):

  • 修改服务端代码中的变量的ip为服务器ip地址。
# creat websockets server, please change ip as your ip address.
ip = ''
startServer = websockets.serve(MainLogic, ip, 8000)
  • 通过python pip命令安装websocket包。
pip install websockets
  • 运行websocketserver.py脚本。
python websocketserver.py

客户端配置

Librws Demo需要网络连接,在STM32F769开发板插入网线,并确保网络连接。客户端操作步骤如下:

  • 修改LiteOS/demos/librws/librws_demo.c中的WEBSOCKET_DEMO_SERVER为服务端IP或域名。
#define TEXT_BUFF_LEN                   1024
#define BIN_BUFF_LEN 1024
#define WEBSOCKET_DEMO_SERVER "your.ip.address"
#define WEBSOCKET_DEMO_PORT 8000
#define LIBRWS_TASK_PRIORITY 6
#define LIBRWS_TASK_STACK_SIZE 0x1400

注意: 改为域名需要开启LWIP_DHCP(DNS需要DHCP来初始化,在Linux下编译,使能LWIP 会默认开启DHCP)。

  • 修改Kernel中默认任务栈大小。在LiteOS源码根目录下执行make menuconfig命令,按如下菜单路径设置,修改为4096
Kernel  --->
Basic Config --->
Task --->
(4096) Task Defalut Stack Size

编译烧录

  • 在LiteOS源码根目录下执行make clean; make -j命令编译LiteOS工程,编译成功后会在out/{platform}/lib路径下生成liblibrws.a和liblibrws_demo.a文件,系统镜像文件为Huawei_LiteOS.bin。
  • 烧录操作请参考https://gitee.com/LiteOS/LiteOS/blob/master/doc/LiteOS_Quick_Start.md。
  • 启动LiteOS后会先初始化网络,开启DHCP,然后运行Librws Demo,建立websocket连接并向服务端发送数据,服务端接收到数据后会返回数据,运行结果如下:
********Hello Huawei LiteOS********
LiteOS Kernel Version : 5.1.0
build data : Jul 14 2021 17:15:39
**********************************
OsAppInit
cpu 0 entering scheduler
app init!
Hello, welcome to liteos demo!
lwip_init OK!!
dhcp start...
Librws demo start to run.
Huawei LiteOS #
Websocket connected
Websocket receive text:
your submit context: LiteOS Websocket demo data

以上为“Librws”使用说明的全部内容,欢迎大家学习交流。

结语

未来我们还会持续新增更多组件、开发板、架构、特性等。

感谢您的阅读,有任何问题、建议,都可以留言给我们,让我们一起进步:  
https://gitee.com/LiteOS/LiteOS/issues。为了更容易找到“LiteOS”代码仓,建议访问https://gitee.com/LiteOS/LiteOS,关注“ Watch”、点赞“Star”、并“Fork”到自己账号下,如图所示。

点击关注,第一时间了解华为云新鲜技术~

玩转LiteOS组件:玩转Librws的更多相关文章

  1. 一起玩转玩转LiteOS组件:TinyFrame

    摘要:TinyFrame是一个简单的用于解析串口(如 UART.telnet.套接字等)通信数据帧的库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转TinyFrame>,作者:Lio ...

  2. 《微信小程序七日谈》- 第三天:玩转Page组件的生命周期

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 前两篇 ...

  3. 带你尝鲜LiteOS 组件EasyFlash

    摘要:EasyFlash是一个开源的轻量级嵌入式闪存库. 本文分享自华为云社区<LiteOS组件尝鲜-玩转EasyFlash>,作者:Lionlace . 基本介绍 EasyFlash是一 ...

  4. 恕我直言!!!对于Maven,菜鸟玩dependency,神仙玩plugin

    打包是一项神圣.而庄严的工作.package意味着我们离生产已经非常近了.它会把我们之前的大量工作浓缩成为一个.或者多个文件.接下来,运维的同学就可以拿着这些个打包文件在生产上纵横四海了. 这么一项庄 ...

  5. 你真的会玩SQL吗?玩爆你的数据报表之存储过程编写(上)

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  6. window下不用安装虚拟机,也可以玩转linux,玩转最新redis

    想要了解redis的最新特性,可是windows下的可以安装的版本最高为3.2,想要验证redis的诸如stream特性的话,就无能为力了. 解决方法之一在windows上安装虚拟机,然后再虚拟机上安 ...

  7. 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩

    <微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...

  8. openstack手动玩转

    <一,preface Important Project Network> openstack or all most cloud env Network desgine  is so m ...

  9. ASP.NET Core 借助 K8S 玩转容器编排

    Production-Grade Container Orchestration - Automated container deployment, scaling, and management. ...

随机推荐

  1. 论文写作中快速更新Word里面交叉引用的编号,巧用MathType

    点击插入编号>>更新,即可快速更新交叉引用的编号,不用一个一个更新域!

  2. Redis Cluster 集群搭建与扩容、缩容

    说明:仍然是伪集群,所有的Redis节点,都在一个服务器上,采用不同配置文件,不同端口的形式实现 前提:已经安装好了Redis,本文的redis的版本是redis-6.2.3 Redis的下载.安装参 ...

  3. Java 实现汇总排序

    排序在系统中经常能用到,一般可以在数据库做排序,也可以在服务端做排序.在数据库一般使用 order by 排序.而服务端也是使用快排.本期使用汇总排序. 问题 统计销售数据,每个销售员都有对应的部门和 ...

  4. 手把手带你使用EFR32 -- 土壤湿度传感器变身第二形态,以 ZigBee 形态出击

    前言 后悔,总之就是非常后悔,我当时到底是为啥才会猪油蒙心,选择了 EFR32 来学习 ZigBee 使用啊? EFR32 这玩意看性能确实不错,但是资料太少了,EmberZnet SDK 也是用得一 ...

  5. manjaro下使用scrcpy安卓设备投屏

    scrcpy 安卓版本要大于等于 5.0 安装scrcpy及安卓工具包 yay -S scrcpy-git android-tools 打开手机 开发者模式->USB调试,将手机通过数据线连接电 ...

  6. MyBatis in

  7. Lock 与 Synchronized 的区别?

    首先两者都保持了并发场景下的原子性和可见性,区别则是synchronized的释放锁机制是交由其自身控制,且互斥性在某些场景下不符合逻辑,无法进行干预,不可人为中断等.而lock常用的则有Reentr ...

  8. XML文档约束有哪几种?有什么区别?

    XML DTD(功能有限) XML Schema (功能强大) Schema本身是XML的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),Schema支持命名空间,Schema ...

  9. @Controller 注解?

    该注解表明该类扮演控制器的角色,Spring不需要你继承任何其他控制器基类或引用Servlet API.

  10. Spring的自动装配?

    在spring中,对象无需自己查找或创建与其关联的其他对象,由容器负责把需要相互协作的对象引用赋予各个对象,使用autowire来配置自动装载模式. 在Spring框架xml配置中共有5种自动装配: ...