Linux C++服务器项目——环境搭建、配置

  • Post author:
  • Post category:linux

牛客 C++高并发服务器开发
参考笔记

1 环境搭建

安装Linux系统(虚拟机安装、云服务器)
https://releases.ubuntu.com/bionic/

安装XSHELL、XFTP
https://www.netsarang,com/zh/free-for-home-school/

安装Visual Studio Code
https://code.visualstudio.com/

安装MySQL数据库
https:/lsegmentfault.com/a/1190000023081074

阿里镜像
https:l/developer.aliyun.com/mirrorl

安装sshd服务

sudo apt install openssh-server

安装gcc/g++/make等 工具

sudo apt-get install build-essential

1.1 安装虚拟机,安装Ubuntu 18.04

1.2 换源

阿里云镜像源

换源:
修改前先将源文件,备份一份,命名为sources-bak.list

sudo cp /etc/apt/sources.list /etc/apt/sources-bak.list

打开文件

 sudo vi /etc/apt/sources.list

替换为

deb https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

# deb https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse

deb https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

1.3 Xshell远程连接到ubuntu

sudo apt install net-tools

在这里插入图片描述连接出错
在这里插入图片描述
虚拟机里需要安装sshd服务
sudo apt install openssh-server

查看进程
ps -ef
在这里插入图片描述

过滤出ssh,grep管道
ps -ef | grep ssh
在这里插入图片描述
再次连接,成功

在这里插入图片描述
接收并保存,,,

在这里插入图片描述

现在就已经链接上Ubuntu 了,后面就可以通过 Xshell操作Ubuntu了
在这里插入图片描述

2 安装配置VScode 远程连接Ubuntu

VScode 安装好后,配置
安装Remote Development,Remote-SSH;
在设置-扩展,搜索,Remote找到,安装
在这里插入图片描述

安装C/C++

在这里插入图片描述
远程连接,
①点击左侧边栏小电脑图标;
②资源管理选择SSH Targets;
③点击加号;
④右侧出现,SSH 连接命令框,输入
服务器端用户名
@
服务器IP
在这里插入图片描述
在这里插入图片描述
④回车后,在下图下拉窗口选择本地配置文件,回车
在这里插入图片描述

右下角出现open config和connect 选项,点击链接;

在这里插入图片描述
连接创建成功
在SSH TRAGETS 下面多了刚才添加的服务器IP;
点击右侧加号,在新的窗口②输入服务器登陆密码
在这里插入图片描述

连接成功
在这里插入图片描述
打开服务器上代码文件夹

在这里插入图片描述
成功连接服务器上的项目

在这里插入图片描述
管理远程连接配置文件,
在创建链接过程中,下图,点击 open config 打开本地配置文件,对添加的远程服务器进行管理
在这里插入图片描述
删除创建重复的连接,重命名等,,,只能在这里改,图形化界面改不了

Host 172.16.111.223 #默认是服务器IP,可以随意修改一个名字,便于记忆,比如实验室1
    HostName 172.16.111.223  # IP不能改
    User xxxx #服务器下个人用户名不能改

在这里插入图片描述
修改完毕,保存,刷新,,,左侧图形化界面也改变了
在这里插入图片描述

怎么方便打开 .ssh config文件?
SSHTARGETS右侧设置图标,右侧框中选择第一行

在这里插入图片描述

在linux桌面创建一个文件夹Linux,用来保存VScode 程序
在这里插入图片描述
在这里插入图片描述

这里要输入Ubuntu密码
在这里插入图片描述
此时相当于,Window主机的VScode 通过 Remote SSH 远程连接到Ubuntu主机,这样在VSCode 开发,就会同步远程同步到Ubuntu主机。
在这里插入图片描述
VS上会显示,那些是本地安装,那些是安装在服务器上
在这里插入图片描述

2.2 本地配置免密登录(失败)

每次配置的时候,都要输入密码,太麻烦;要在本地配置免密登录;
在这里插入图片描述

在WIndow CMD窗口

ssh-keygen -t rsa

回车回车回车

在这里插入图片描述
pwd输出当前路径

luck@luck:~$ pwd 
/home/luck

进入到路径下,可以看到公钥文件

luck@luck:~$ cd .ssh/
luck@luck:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub
luck@luck:~/.ssh$ 

在Ubuntu用户下可以看到这几个文件
在这里插入图片描述

如果想要在,xshell下面看打开该文件

关于linux用Xshell的xftp查看隐藏文件夹和文件
在这里插入图片描述

然后就可以找到隐藏文件了
在这里插入图片描述
设置文件打开方式
在这里插入图片描述

右键文件 Notepad++编辑

在这里插入图片描述

3 高并发服务器项目 功能需求 实现步骤

gaojingcomeWebServer github链接

在这里插入图片描述
WebServer
用C++实现的高性能WEB服务器,经过webbenchh压力测试可以实现上万的QPS

3.1 功能

  • 利用IO复用技术Epoll与线程池实现多线程的Reactor高并发模型;

  • 利用正则与状态机解析HTTP请求报文,实现处理静态资源的请求;

  • 利用标准库容器封装char,实现自动增长的缓冲区;

  • 基于小根堆实现的定时器,关闭超时的非活动连接;

  • 利用单例模式与阻塞队列实现异步的日志系统,记录服务器运行状态;

  • 利用RAII机制实现了数据库连接池,减少数据库连接建立与关闭的开销,同时实现了用户注册登录功能。

  • ·增加logsys,threadpool测试单元(todo: timer, sqlconnpool, httprequest, httpresponse)

3.2 环境要求

  • Linux
  • C++14
  • MySql

3.3 目录树

.
├── code           源代码
│   ├── buffer
│   ├── config
│   ├── http
│   ├── log
│   ├── timer
│   ├── pool
│   ├── server
│   └── main.cpp
├── test           单元测试
│   ├── Makefile
│   └── test.cpp
├── resources      静态资源
│   ├── index.html
│   ├── image
│   ├── video
│   ├── js
│   └── css
├── bin            可执行文件
│   └── server
├── log            日志文件
├── webbench-1.5   压力测试
├── build          
│   └── Makefile
├── Makefile
├── LICENSE
└── readme.md

3.4 项目启动

需要先配置好对应的数据库

// 建立yourdb库
create database yourdb;

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

// 添加数据
INSERT INTO user(username, password) VALUES('name', 'password');
make
./bin/server

3.5 单元测试

cd test
make
./test

3.6 压力测试

在这里插入图片描述


./webbench-1.5/webbench -c 100 -t 10 http://ip:port/
./webbench-1.5/webbench -c 1000 -t 10 http://ip:port/
./webbench-1.5/webbench -c 5000 -t 10 http://ip:port/
./webbench-1.5/webbench -c 10000 -t 10 http://ip:port/
  • 测试环境: Ubuntu:19.10 cpu:i5-8400 内存:8G
  • QPS 10000+

3.7 TODO

  • config配置
  • 完善单元测试
  • 实现循环缓冲区

4 配置环境

4.1 安装MySQL

Ubuntu18.04安装MySQL

1、安装MySQL

sudo apt-get install mysql-server
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

2、更改默认密码

  • 查看默认配置文件,结果如下图
sudo cat /etc / mysql / debian.cnf

在这里插入图片描述
图有‘user=debian-sys-maint’,即为自动配置的默认用户;‘password=XI2YBbL4W3ouvpJq’,即为自动配置的密码。

  • 以默认配置登陆mysql
mysql -u debian-sys-maint -p        // 用户名以自己的配置文件为准

提示输入密码,这里要输入的就是上一步的‘password=XI2YBbL4W3ouvpJq’(密码以自己的配置文件为准)。
在这里插入图片描述

  • 更改密码
use mysql; 
// 下一行,密码改为了yourpassword,可以设置成其他的 
update mysql.user set authentication_string=password('yourpassword') where user='root' and Host ='localhost'; //更改密码,'yourpassword'要改成自己的密码,
update user set plugin="mysql_native_password"; 
flush privileges; //刷新
quit;//退出

在这里插入图片描述

update mysql.user set authentication_string=password('yourpassword') where user='root' and Host ='localhost'; 

‘yourpassword’要改成自己的密码,这里就root 和要用户名root一致好记
在这里插入图片描述
密码更新

update user set plugin="mysql_native_password"; 

在这里插入图片描述

刷新并退出

flush privileges; 
quit;

在这里插入图片描述

  • 重启MySQL服务,并登录
sudo service mysql restart mysql -u root -p 

在这里插入图片描述

4.2 创建数据库

需要先配置好对应的数据库
总的流程能如下:

// 建立yourdb库
create database yourdb;

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

// 添加数据
INSERT INTO user(username, password) VALUES('name', 'password');
make
./bin/server

开始按照流程一步步实现

mysql> create database webserver;
mysql> use webserver;

在这里插入图片描述

CREATE TABLE user(
    username char(50) NULL,
    password char(50) NULL
)ENGINE=InnoDB;
INSERT INTO user(username, password) VALUES('luck', 'luck');

在这里插入图片描述
数据库创建好了;

退出

quit

4.3 安装gcc/g++/make等 工具

sudo apt-get install build-essential

在这里插入图片描述
安装好之后就可以,执行make了;
警告可以不用管
在这里插入图片描述
make后再bin文件下生成server文件
在这里插入图片描述
运行 server

bin/server

在这里插入图片描述
服务器已经运行起来了,
访问以下看看
在浏览器输入服务器地址 http://192.168.37.128:1316;
注意冒号后面是端口号,默认22,但是我们程序入口是1316 ;
在这里插入图片描述
访问成功
在这里插入图片描述
长度


版权声明:本文为m0_51233386原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。