非常适合初学者的轻量级Web服务器—TinyWebServer

《开源精选》是我们分享 Github、Gitee 等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是一个开源的 C++ Web 服务器——TinyWebServer。

非常适合初学者的轻量级Web服务器—TinyWebServer

TinyWebServer 是一个开源的 C++轻量级 Web 服务器,该项目非常适合初学者快速实践网路编程,搭建属于自己的服务器。

特性

  • • 使用 线程池 + 非阻塞 socket + epoll(ET 和 LT 均实现) + 事件处理(Reactor 和模拟Proactor 均实现) 的并发模型

  • • 使用状态机解析 HTTP 请求报文,支持解析 GET 和 POST 请求

  • • 访问服务器数据库实现 web 端用户注册、登录功能,可以请求服务器图片和视频文件

  • • 实现同步/异步日志系统,记录服务器的运行状态

  • • 经 Webbench 压力测试可以实现上万的并发连接数据交换

框架

非常适合初学者的轻量级Web服务器—TinyWebServer

Demo 演示

注册演示

非常适合初学者的轻量级Web服务器—TinyWebServer

登录演示

非常适合初学者的轻量级Web服务器—TinyWebServer

请求图片文件演示(6M)

非常适合初学者的轻量级Web服务器—TinyWebServer

请求视频文件演示(39M)

非常适合初学者的轻量级Web服务器—TinyWebServer

压力测试

在关闭日志后,使用 Webbench 对服务器进行压力测试,对 listenfd 和 connfd 分别采用 ET 和 LT 模式,均可实现上万的并发连接,下面列出的是两者组合后的测试结果。

  • • 并发连接总数:10500

  • • 访问服务器时间:5s

  • • 所有访问均成功

Proactor,LT + LT,93251 QPS

非常适合初学者的轻量级Web服务器—TinyWebServer

Proactor,LT + ET,97459 QPS

非常适合初学者的轻量级Web服务器—TinyWebServer

Proactor,ET + LT,80498 QPS

非常适合初学者的轻量级Web服务器—TinyWebServer

Proactor,ET + ET,92167 QPS

非常适合初学者的轻量级Web服务器—TinyWebServer

Reactor,LT + ET,69175 QPS

非常适合初学者的轻量级Web服务器—TinyWebServer

注意:使用本项目的 webbench 进行压测时,若报错显示 webbench 命令找不到,将可执行文件 webbench 删除后,重新编译即可。

源码下载

目前有两个版本,版本间的代码结构有较大改动,文档和代码运行方法也不一致。重构版本更简洁,原始版本(raw_version)更大保留游双代码的原汁原味,从原始版本更容易入手。

如果遇到 github 代码下载失败,或访问太慢,可以从以下链接下载,与 Github 最新提交同步。

github:https://github.com/qinguoyi/TinyWebServer
重构版本下载地址:https://pan.baidu.com/share/init?surl=PozKji8Oop-1BYcfixZR0g
提取码 : vsqq
原始版本(raw_version)下载地址:https://pan.baidu.com/share/init?surl=asMNDW-zog92DZY1Oa4kaQ
提取码 : 9wye

快速运行

服务器测试环境

  • • Ubuntu版本16.04

  • • MySQL版本5.7.29

浏览器测试环境

  • • Windows、Linux 均可

  • • Chrome

  • • FireFox

  • • 其他浏览器暂无测试

测试前确认已安装 MySQL 数据库

// 建立yourdb库
create database yourdb;

// 创建user表
USE yourdb;
CREATE TABLE user(
    username char(50) NULL,
    passwd char(50) NULL
)ENGINE=InnoDB;

// 添加数据
INSERT INTO user(username, passwd) VALUES('name', 'passwd');

修改 main.cpp 中的数据库初始化信息

//数据库登录名,密码,库名
string user = "root";
string passwd = "root";
string databasename = "yourdb";

build

sh ./build.sh

启动server

./server

浏览器端

ip:9006


传送门

开源协议:Apache2.0

开源地址:https://github.com/qinguoyi/TinyWebServer

-END-


原文始发于微信公众号(开源技术专栏):非常适合初学者的轻量级Web服务器—TinyWebServer

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/120676.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!