cppnet是一个轻量级C++网络框架,作为cppweb的2.0升级版,它解决了之前版本单头文件的臃肿问题, 采用现代C++构建,使用方式类似于Go语言的gin框架,学习和入门成本低,非常适合初学者学习源码。 框架轻量化设计,源码不到5000行,避免了大型网络框架的臃肿,同时拥有完善的文档体系和测试体系, 保障了易用性和稳定性。
入侵性小,全平台支持,无需强行安装到系统include目录,推荐作为submodule引用或直接使用静态库
使用方式和函数类似Go的gin框架,学习和入门成本小,适合初学者进行源码学习
非常小巧,源码不到5000行,避免了大型网络框架的臃肿问题
拥有完整的网站文档体系和测试体系,保障易用性和稳定性
内置SSL支持,可轻松构建安全的HTTPS服务器,保护数据传输安全
支持HTTP协议,已完成从cppweb的彻底迁移,同时支持UDP协议,满足多样化网络需求
从Releases下载库并解压, 需要编译器支持C++17。如果需要SSL功能(需要安装openssl),请下载ssl版本,否则下载默认版本即可。
基础HTTP服务器示例:
#include "./cppnet/include/cppnet/http/server/http_server.hpp"
#include "./cppnet/include/cppnet/utils/const.hpp"
#include <iostream>
using namespace cppnet;
int main() {
HttpServer server;
auto rc = server.Init({"127.0.0.1", 8080});
if (rc != kSuccess) {
std::cout << "init server wrong " << server.err_msg() << std::endl;
return rc;
}
server.set_logger(std::make_shared<StdLogger>());
server.GET("/", [](HttpContext &ctx) {
ctx.resp().Success(HttpHeader::ContentType::kTextHtml,
"<h1>Hello, World!</h1>");
});
rc = server.Run();
if (rc != kSuccess) {
std::cout << "run server wrong " << server.err_msg() << std::endl;
return rc;
}
return 0;
}
使用CMake编译,在CMakeLists中添加:
# 是否使用ssl都需要添加
link_directories(./cppnet/lib)
link_libraries(-lcppnet)
# 如果使用的是ssl版本并且需要使用ssl的功能,才需要添加下面的
add_definitions(-DCPPNET_OPENSSL)
link_libraries(-lssl -lcrypto)
使用Makefile编译:
all: libserver-makefile
libserver-makefile:
g++ -O2 -Wall -std=c++17 ./main.cpp -o libserver-makefile -lcppnet -L./cppnet/lib
# ssl 版本的是
g++ -O2 -Wall -std=c++17 ./main.cpp -o libserver-makefile -DCPPNET_OPENSSL -lcppnet -lssl -lcrypto -L./cppnet/lib
执行编译生成的文件,服务器将在8080端口启动,访问http://127.0.0.1:8080即可看到"Hello, World!"。
更多示例请参考项目中的demo文件夹和test文件夹
基础的HTTP服务器实现,包含路由和静态文件服务
完整的Web服务器示例,支持配置文件和多种功能
基于canvas的MNIST手写数字识别演示
使用SSL的安全服务器示例
.
.
├── LICENSE
├── README.en.md
├── README.md
├── bench
│ ├── build.sh
│ └── init.sh
├── demo
│ ├── asset
│ ├── build.sh
│ ├── mnist
│ ├── pack
│ ├── simple-http-server
│ ├── use-lib-server
│ ├── use-lib-server-ssl
│ ├── util
│ └── web-server
├── docs
│ ├── cppnet
│ └── update.sh
└── src
├── CMakeLists.txt
├── build.sh
├── cppnet
├── lib
├── release.sh
├── test
├── third_party
└── win_release.sh
cppnet/
cppnet
├── http
│ ├── client
│ │ ├── http_client.cpp
│ │ └── http_client.hpp
│ ├── header
│ │ ├── http_header.cpp
│ │ └── http_header.hpp
│ ├── req
│ │ ├── http_req.cpp
│ │ ├── http_req.hpp
│ │ ├── method
│ │ │ ├── http_method.cpp
│ │ │ └── http_method.hpp
│ │ └── route
│ │ ├── http_route.cpp
│ │ └── http_route.hpp
│ ├── resp
│ │ ├── http_resp.cpp
│ │ ├── http_resp.hpp
│ │ └── status_code
│ │ ├── http_status_code.cpp
│ │ └── http_status_code.hpp
│ ├── server
│ │ ├── filter
│ │ │ ├── http_filter.hpp
│ │ │ ├── http_host_filter.hpp
│ │ │ └── http_method_filter.hpp
│ │ ├── http_server.cpp
│ │ └── http_server.hpp
│ └── version
│ ├── http_version.cpp
│ └── http_version.hpp
├── log
│ ├── file_logger.cpp
│ ├── file_logger.hpp
│ ├── logger.hpp
│ ├── multi_logger.cpp
│ ├── multi_logger.hpp
│ └── std_logger.hpp
├── server
│ ├── io_multiplexing
│ │ ├── epoll.cpp
│ │ ├── epoll.hpp
│ │ ├── io_multiplexing_base.hpp
│ │ ├── io_multiplexing_factory.cpp
│ │ ├── io_multiplexing_factory.hpp
│ │ ├── kqueue.cpp
│ │ ├── kqueue.hpp
│ │ ├── select.cpp
│ │ └── select.hpp
│ ├── tcp_server.cpp
│ └── tcp_server.hpp
├── socket
│ ├── address.cpp
│ ├── address.hpp
│ ├── socket.cpp
│ └── socket.hpp
├── ssl
│ ├── ssl_context.cpp
│ ├── ssl_context.hpp
│ ├── ssl_socket.cpp
│ └── ssl_socket.hpp
├── timer
│ ├── timer.cpp
│ └── timer.hpp
└── utils
├── const.hpp
├── date.cpp
├── date.hpp
├── file.cpp
├── file.hpp
├── host.cpp
├── host.hpp
├── string.cpp
├── string.hpp
├── threadpool.cpp
├── threadpool.hpp
├── trie.cpp
├── trie.hpp
├── version.cpp
└── version.hpp
19 directories, 61 files