cppnet

轻量级C++网络框架,cppweb 2.0升级版

全平台支持,采用现代C++构建,更加简单的使用方式,更好的性能

关于项目

cppnet是一个轻量级C++网络框架,作为cppweb的2.0升级版,它解决了之前版本单头文件的臃肿问题, 采用现代C++构建,使用方式类似于Go语言的gin框架,学习和入门成本低,非常适合初学者学习源码。 框架轻量化设计,源码不到5000行,避免了大型网络框架的臃肿,同时拥有完善的文档体系和测试体系, 保障了易用性和稳定性。

C++17 HTTP SSL/TLS UDP 跨平台

核心特性

使用简单

入侵性小,全平台支持,无需强行安装到系统include目录,推荐作为submodule引用或直接使用静态库

现代C++构建

使用方式和函数类似Go的gin框架,学习和入门成本小,适合初学者进行源码学习

轻量化框架

非常小巧,源码不到5000行,避免了大型网络框架的臃肿问题

完善的文档

拥有完整的网站文档体系和测试体系,保障易用性和稳定性

SSL支持

内置SSL支持,可轻松构建安全的HTTPS服务器,保护数据传输安全

多协议支持

支持HTTP协议,已完成从cppweb的彻底迁移,同时支持UDP协议,满足多样化网络需求

快速开始

1 下载Release包

Releases下载库并解压, 需要编译器支持C++17。如果需要SSL功能(需要安装openssl),请下载ssl版本,否则下载默认版本即可。

2 编写代码

基础HTTP服务器示例:

main.cpp
#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;
}

3 编译

使用CMake编译,在CMakeLists中添加:

CMakeLists.txt
# 是否使用ssl都需要添加
link_directories(./cppnet/lib)
link_libraries(-lcppnet)

# 如果使用的是ssl版本并且需要使用ssl的功能,才需要添加下面的
add_definitions(-DCPPNET_OPENSSL)
link_libraries(-lssl -lcrypto)

使用Makefile编译:

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

4 运行

执行编译生成的文件,服务器将在8080端口启动,访问http://127.0.0.1:8080即可看到"Hello, World!"。

文档和资源

示例项目

更多示例请参考项目中的demo文件夹和test文件夹

简单HTTP服务器

基础的HTTP服务器实现,包含路由和静态文件服务

路径: demo/simple-http-server

Web服务器

完整的Web服务器示例,支持配置文件和多种功能

路径: demo/web-server

MNIST演示

基于canvas的MNIST手写数字识别演示

路径: demo/mnist

SSL服务器

使用SSL的安全服务器示例

路径: demo/use-lib-server-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/
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
                    

类关系图

cppnet类关系图

关于作者

作者头像

chenxuan

cppnet框架作者

如果你有任何问题,可以通过邮箱联系作者:chenxuanweb@qq.com