workFlow c++异步网络库编译教程与简介

简介: 搜狗公司C++服务器引擎,编程范式。支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理数百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数后端与嵌入式开发需求。编程范式结构化并发与任务隐藏回调与内存回收机制

如果觉得写的可以,请给一个点赞+关注支持一下

搜狗公司C++服务器引擎,编程范式。支撑搜狗几乎所有后端C++在线服务,包括所有搜索服务,云输入法,在线广告等,每日处理数百亿请求。这是一个设计轻盈优雅的企业级程序引擎,可以满足大多数后端与嵌入式开发需求。

workflow使用场景:

  • 快速搭建http服务器:
  • 作为万能异步客户端。目前支持httpredismysqlkafka协议。
    • 轻松构建效率极高的spider。
  • 实现自定义协议client/server,构建自己的RPC系统。
    • srpc就是以它为基础,作为独立项目开源。支持srpcbrpctrpcthrift等协议。
  • 构建异步任务流,支持常用的串并联,也支持更加复杂的DAG结构。
  • 作为并行计算工具使用。除了网络任务,我们也包含计算任务的调度。所有类型的任务都可以放入同一个流中。
  • Linux系统下作为文件异步IO工具使用,性能超过任何标准调用。磁盘IO也是一种任务。
  • 实现任何计算与通讯关系非常复杂的高性能高并发的后端服务。
  • 构建微服务系统。
    • 项目内置服务治理与负载均衡等功能。

编译和运行环境

  • 项目支持LinuxmacOSWindowsAndroid等操作系统。
    • Windows版以windows分支发布,使用iocp实现异步网络。用户接口与Linux版一致。
  • 支持所有CPU平台,包括32或64位x86处理器,大端或小端arm处理器,国产loongson龙芯处理器实测支持。
  • 需要依赖于OpenSSL,推荐OpenSSL 1.1及以上版本。
    • 不喜欢SSL的用户可以使用nossl分支,代码更简洁。
  • 项目使用了C++11标准,需要用支持C++11的编译器编译。但不依赖boostasio
  • 项目无其它依赖。如需使用kafka协议,需自行安装lz4zstdsnappy几个压缩库。
git clone https://github.com/sogou/workflow # From gitee: git clone https://gitee.com/sogou/workflow
cd workflow
make
cd tutorial
make

编程范式

结构化并发与任务隐藏

  • 我们系统中包含五种基础任务:通讯,计算,文件IO,定时器,计数器。
  • 一切任务都由任务工厂产生,用户通过调用接口组织并发结构。例如串联并联,DAG等。
  • 大多数情况下,用户通过任务工厂产生的任务,都隐藏了多个异步过程,但用户并不感知。
    • 例如,一次http请求,可能包含许多次异步过程(DNS,重定向),但对用户来讲,就是一次通信任务。
    • 文件排序,看起来就是一个算法,但其实包括复杂的文件IO与CPU计算的交互过程。
    • 如果把业务逻辑想象成用设计好的电子元件搭建电路,那么每个电子元件内部可能又是一个复杂电路。
    • 任务隐藏机制大幅减少了用户需要创建的任务数量和回调深度。
  • 任何任务都运行在某个串行流(series)里,共享series上下文,让异步任务之间数据传递变得简单。

回调与内存回收机制

  • 一切调用都是异步执行,几乎不存在占着线程等待的操作。
  • 显式的回调机制。用户清楚自己在写异步程序。
  • 通过一套对象生命周期机制,大幅简化异步程序的内存管理
    • 任何框架创建的任务,生命周期都是从创建到callback函数运行结束为止。没有泄漏风险。
      • 如果创建了任务之后不想运行,则需要通过dismiss()接口删除。
    • 任务中的数据,例如网络请求的resp,也会随着任务被回收。此时用户可通过std::move()把需要的数据移走。
    • 项目中不使用任何智能指针来管理内存。代码观感清新。
  • 尽量避免用户级别派生,以std::function封装用户行为,包括:
    • 任何任务的callback。
    • 任何server的process。符合FaaS(Function as a Service)思想。
    • 一个算法的实现,简单来讲也是一个std::function
    • 如果深入使用,又会发现一切皆可派生。
目录
相关文章
|
17天前
|
编译器 开发工具 C++
Dev-C++详细安装教程及中文设置(附带安装包链接)
Dev-C++详细安装教程及中文设置(附带安装包链接)
42 0
|
19天前
|
存储 C++ 容器
C++STL(标准模板库)处理学习应用案例
【4月更文挑战第8天】使用C++ STL,通过`std:vector`存储整数数组 `{5, 3, 1, 4, 2}`,然后利用`std::sort`进行排序,输出排序后序列:`std:vector<int> numbers; numbers = {5, 3, 1, 4, 2}; std:sort(numbers.begin(), numbers.end()); for (int number : numbers) { std::cout << number << " "; }`
19 2
|
1月前
|
Java 程序员 Maven
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
【C/C++ CommonAPI入门篇】深入浅出:CommonAPI C++ D-Bus Tools 完全使用教程指南
58 0
|
15天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
39 6
|
17天前
|
数据采集 大数据 数据安全/隐私保护
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
本文探讨了使用Perl和RobotRules库在遵循robots.txt规则下抓取小红书数据的方法。通过分析小红书的robots.txt文件,配合亿牛云爬虫代理隐藏真实IP,以及实现多线程抓取,提高了数据采集效率。示例代码展示了如何创建一个尊重网站规则的数据下载器,并强调了代理IP稳定性和抓取频率控制的重要性。
掌握网络抓取技术:利用RobotRules库的Perl下载器一览小红书的世界
|
12天前
|
数据采集 API 数据安全/隐私保护
畅游网络:构建C++网络爬虫的指南
本文介绍如何使用C++和cpprestsdk库构建高效网络爬虫,以抓取知乎热点信息。通过亿牛云爬虫代理服务解决IP限制问题,利用多线程提升数据采集速度。示例代码展示如何配置代理、发送HTTP请求及处理响应,实现多线程抓取。注意替换有效代理服务器参数,并处理异常。
畅游网络:构建C++网络爬虫的指南
|
17天前
|
C++
glog --- C++日志库
glog --- C++日志库
|
23天前
|
数据采集 网络协议 API
python中其他网络相关的模块和库简介
【4月更文挑战第4天】Python网络编程有多个流行模块和库,如requests提供简洁的HTTP客户端API,支持多种HTTP方法和自动处理复杂功能;Scrapy是高效的网络爬虫框架,适用于数据挖掘和自动化测试;aiohttp基于asyncio的异步HTTP库,用于构建高性能Web应用;Twisted是事件驱动的网络引擎,支持多种协议和异步编程;Flask和Django分别是轻量级和全栈Web框架,方便构建不同规模的Web应用。这些工具使网络编程更简单和高效。
|
25天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
38 1
|
1月前
|
算法 编译器 程序员
深入理解C++编译模式:了解Debug和Release的区别
深入理解C++编译模式:了解Debug和Release的区别
62 2