分享一个适合嵌入式的C++开源项目-Workflow

分享一个适合嵌入式的C++开源项目-Workflow

华妹来喽~

欢迎大家来到华妹碎碎念栏目!每周五固定更新,你将收获众多行业小知识,希望对你有帮助哦~

分享一个适合嵌入式的C++开源项目-Workflow

华妹今天分享一个适合C++开发者进阶的开源项目,这个项目的名字叫workflow,项目地址如下:https://github.com/sogou/workflow

分享一个适合嵌入式的C++开源项目-Workflow

项目适用场景

该项目是搜狗的服务器引擎,几乎搜狗所有的后端C++服务和其他几十家公司都在使用这个引擎,每日处理超百亿请求。

不仅如此,该项目也非常适合在嵌入式应用上实现网络的框架设计,框架设计是一个项目成功与否非常重要的环节,而网络在AIOT、智能家居、智能硬件上尤其重要。

分享一个适合嵌入式的C++开源项目-Workflow

比如在项目中需要使用http,Workflow在设计上可以通过Cmake配置支持windows 或者 Linux 或 MacOS 等多个平台上的多个项目编译,而且,可以在不同平台上保持相同的接口。

如果你新增一个嵌入式设备,比如ESP32,在服务器和客户端只需要维护一套代码,就可以完成自己的应用需求。

真正做到把云端的技术移植到嵌入式设备上运行。

适用于嵌入式几大特点:

嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!

无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。

点击这里找小助理0元领取:加微信领取资料

分享一个适合嵌入式的C++开源项目-Workflow

1、支持多平台、多体系结构

多平台的代码说明在配置和耦合上考虑了很多设计上的细节。⽬前Workflow除了Linux、Windows、MacOS、Android以外,还可以愉快地在树莓派、国产⻰芯处理器等不同体系结构上运⾏。

分享一个适合嵌入式的C++开源项目-Workflow

2、编译快

Workflow除OpenSSL以外不依赖其他库,⽽且在接口层是没有模版的,因此编译速度⾮常快,不到一分钟即可编出一个可⽤的lib。

3、体积小、支持编译剪裁

Workflow的Kafka协议默认是不编译的,除此之外,还可以裁剪掉其他不常⽤的模块。

并且可以通过strip命令去掉符号链接,即可让库⽂件缩⼩到400k左右。

4、运行时内存小、调度快

作为一个异步调度的库,Workflow调度性能一直是⾮常好的。另外运⾏时内存占⽤也⾮常的小。

5、自定义协议非常方便

社区活跃以及项目负责人积极回复问题也是一个亮点,如果在框架搭建和移植上出现问题,在社区上提问都会得到快速响应。

分享一个适合嵌入式的C++开源项目-Workflow

移植到嵌入式设备的开源支持

据悉⽬前已经有许多⽤户⽤到了嵌⼊式上了。github官方也做出了耐心的解释。

分享一个适合嵌入式的C++开源项目-Workflow

框架能做什么

1、轻松的搭建server

不用多说,服务端框架如果不能搭建server那还玩啥了,但使用这个框架非常方便,以http server为例,只需要简单几行代码即可:

#include <stdio.h> #include “workflow/WFHttpServer.h” int main() { WFHttpServer server([](WFHttpTask *task) { task->get_resp()->append_output_body(“Hello World!”); }); if (server.start(8888) == 0) { // start server on port 8888 getchar(); // press “Enter” to end. server.stop(); } return 0; }

2、轻松高效的发起客户端请求

项目号称可作为万能异步客户端,目前支持http,redis,mysql、websocket和kafka协议,下面是官方给出的一个mysql的客户端示例:

int main(int argc, char *argv[]) { … WFMySQLTask *task = WFTaskFactory::create_mysql_task(url, RETRY_MAX, mysql_callback); task->get_req()->set_query(“SHOW TABLES;”); … task->start(); … }

以往的C++ server需要访问mysql时,可能使用的是传统的客户端。在一个线程下以同步阻塞的方式等待数据到来。如果有多个网络请求希望并发,那么用户需要管理好多个mysql cli对象。

workflow完美的解决了这一系列问题,把所有这种用户请求交给内部的poller线程统一管理,实现了高效的非阻塞IO行为,提升了server作为客户端请求数据时的性能表现。再也不用担心这种客户端行为影响server整体的性能。

分享一个适合嵌入式的C++开源项目-Workflow

支持自定义协议client/server:用户可构建自己的RPC系统,搜狗有个开源项目srpc就是以这个框架为基础实现的。

3、可建构异步任务流

支持串联,支持并联,支持串并联的组合体,也支持复杂的DAG结构。

4、异步IO

在Linux系统下可作为文件异步IO工具使用,性能超过任何标准调用。

5、通信与计算一体化

多数框架都着重于网络IO的效率问题,而计算与任务调度等需要用户自己实现,workflow会自动对任务进行调度,打通网络和磁盘等资源,特别适合需要网络通信的重计算模块。

任务流框架设计

在作者的设计理念中,一切业务逻辑皆是任务,多个任务会组成任务流,任务流可组成图,这个图可能是串联图、并联图,也可能是串并联图,类似于这种:

分享一个适合嵌入式的C++开源项目-Workflow

或者是这种复杂的DAG图:

分享一个适合嵌入式的C++开源项目-Workflow

当然图的层次结构可由用户自定义,很牛的一点是支持动态创建任务流。

分享结束,希望小伙伴喜欢,嵌入式真需要不断学习去充实自己的大脑,相信你们都能够成为最厉害的程序员。

转载自:华清远见

文章来源于分享一个适合嵌入式的C++开源项目-Workflow

原文链接:

https://mp.weixin.qq.com/s/udZEAC068RKc8MurLvUJfQ

想要通过创业或副业增加收入?点我了解


 

 

 

本文所提到的观点仅作为用户获取信息之目的,不构成投资建议,不构成社商用,纯属分享。所涉及标的不作推荐。本站不为本页面提供的信息错误、残缺、延时或因依靠此信息所采取的任何行动负责。如有侵权请联系删除。