本项目参考qingguoyi项目;游双《Linux高性能服务器编程》
用于学习 Linux C++ 轻量级 Web 服务器编程
1、通过数据库连接池,实现客户端用户登录、注册功能,可以请求服务器图片和视频文件; 2、设计同步日志系统,以单例模式创建日志,基于阻塞队列实现异步日志记录,增强服务器并发能力; 3、设计使用线程池,减少动态增删线程的开销,增加服务其资源利用率; 4、针对非活跃连接,添加定时器,以双向链表方式保存计时器,并通过管道通信通知主线程。
访问服务器:https://120.53.228.144:9006/
可以看到 我的个人简历 AND 《黑客帝国》剪辑视频
-
服务器环境 腾讯云 Ubuntu 22.04
MySQL 8.0.36 -
浏览器测试 :
Safari
Chrome
其他暂无测试
保证拥有 MySQL 最新环境
确保拥有 mysql.h 头文件
sudo apt-get install libmysqlclient-dev
[email protected]:SAY4EVER729/MyTinyWebServer.git
或 通过 HTTPS 链接下载https://github.com/SAY4EVER729/MyTinyWebServer.git
创建 MySQL 数据库
// 输入用户密码进入mysql
mysql -u root -p
// 创建数据库 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');
绑定数据库账号密码
cd main.cpp
//数据库登录名,密码,库名
string user = "root";
string passwd = "root";
string databasename = "yourdb";
内置 shell 自动编译
sh ./build.sh
# 启动
./server
端口默认9006,访问需要 hppt:https://ipv4地址 + 端口号,例如:
可以直接访问本项目 https://120.53.228.144:9006
首先保证拥有 <rpc/types.h>
头文件
下载,然后通过软连接,连接至项 usr/include 库
# Ubuntu
sudo apt-get install -y libtirpc-dev
# 软连接
sudo ln -s /usr/include/tirpc/rpc/types.h /usr/include/rpc
sudo ln -s /usr/include/tirpc/netconfig.h /usr/include
sudo apt-get install universal-ctags
gcc webbench.c -o webbench
webbench 压测:
# 3001并发数量, 时间 5 秒
./webbench -c 3001 -t 5 https://120.53.228.144:9006/
腾讯云 2 G 2 核下:
1000 并发:
3000 并发:
本项目编写的顺序(每个目录中都有相应的学习记录Readme):
-
首先编写的是用于控制多线程并发的锁类对象,易于代码复用,具体参见locker_readme
-
编写服务器的灵魂(个人认为)--> 日志系统,具体参见log_readme
-
编写用于改善服务器性能的机制,该机制由升序链表构成,用于处理非活跃连接,具体参见lst_timer_readme
-
http类,涉及 有限状态机、 I/O 复用 、 HTTP 相关知识,见http_readme
-
连接池的实现,连接池的作用、逻辑、用到的函数见CGImysql_readme
-
学习锁、信号、信号量前一定要掌握多进程多线程,但是需要先实现锁类编写,以下是线程池实现,具体参见threadpool_readme
-
other : html 目录文件参见root_readme
持续更新中。。。