MirrorYuChen
MirrorYuChen
Published on 2025-03-09 / 17 Visits
0
0

workflow学习笔记(一):HelloWorld

workflow学习笔记(一):HelloWorld

1.源码安装

>> git clone https://github.com/sogou/workflow
>> cd wworkflow && mkdir build && cd build
>> cmake .. && make -j 8 && sudo make install

2.简单使用

  • (1) C++代码:HelloWorld.cc
#include <stdio.h>
#include "workflow/WFHttpServer.h"

int main() {
    WFHttpServer server([](WFHttpTask *task) {
        task->get_resp()->append_output_body("<html>Hello World!</html>");
    });

    if (server.start(8888) == 0) { // start server on port 8888
        getchar(); // press "Enter" to end.
        server.stop();
    }

    return 0;
}
  • (2) CMake工程:
cmake_minimum_required(VERSION 3.1...3.26)

project(Server LANGUAGES C CXX)

find_library(LIBRT rt)
find_package(OpenSSL REQUIRED)
find_package(workflow REQUIRED CONFIG HINTS ..)

include_directories(${OPENSSL_INCLUDE_DIR} ${WORKFLOW_INCLUDE_DIR})
link_directories(${WORKFLOW_LIB_DIR})

set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS}   -Wall -fPIC -pipe -std=gnu90")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fPIC -pipe -std=c++11 -fno-exceptions")

set(TEST_LIST
  HelloWWorld
)

set(WORKFLOW_LIB workflow pthread OpenSSL::SSL OpenSSL::Crypto ${LIBRT})

foreach(test ${TEST_LIST})
	add_executable(${test} ${test}.cc)
	target_link_libraries(${test} ${WORKFLOW_LIB})
endforeach()
  • (3) 编译使用:
>> mkdir build && cd build
>> cmake .. && make -j 8
>> ./HelloWWorld
  • (4) 查看结果:
# 1.访问本地地址
http://localhost:8888/
# 2.可以输出结果
Hello World!

3.代码解析

#include <stdio.h>
#include "workflow/WFHttpServer.h"

int main() {
    WFHttpServer server([](WFHttpTask *task) {
        task->get_resp()->append_output_body("<html>Hello World!</html>");
    });

    if (server.start(8888) == 0) { // start server on port 8888
        getchar(); // press "Enter" to end.
        server.stop();
    }

    return 0;
}

​ 代码非常简洁,首先,创建一个 WFHttpServer实例,并向构造函数中传入了一个 lambda函数作为回调函数,用于处理HTTP请求。当HTTP请求到来时,server会调用这个 lambda函数,将 "<html>Hello World!</html>"作为响应体内容返回。

​ 然后,启动 server服务器,并监听8888端口,等待客户端请求到来,并与客户端进行交互。最后,也可以通过手动输入字符,getchar()执行后,server.stop()就会停止服务运行。

4.参考资料


Comment