workflow学习笔记(一):HelloWorld
1.源码安装
- (1) workflow项目地址
- (2) 安装
>> 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.参考资料
- [1] workflow