远程聊天室
引言
1.设计思路
注册登录、多客户端数据传输问题(高并发)
2.高并发额解决方案:
TCP+多线程,缺点对服务器性能要求比较高
select(集合) 一个线程不断循环,对服务器性能要求比较低,但并发量比较低,处理效率比较低
epoll 并发量理论上无限,处理效率高
epoll+多线程(访问时再创建线程),频繁启动线程消耗时间资源
epoll+线程池(提前创建一定数量的线程)
libevent(有同步的机制)
libevent+多线程
关于libevent,可以参考如下链接:libevent库的使用
3.数据保存方式
- 数据库:服务器数据存储。单用户的个人信息存储和多用户的群组信息存储
- 链表:实时数据保存。用来保存当前网络在线用户以及当前网络在线群成员
一.轻量级服务器登录
1.1 购买Linux服务器
笔者购买的是腾讯云轻量服务器,系统是 Ubuntu 20.04 LTS 版本
1.2 重置密码
将密码重置为一个自己熟悉的密码
1.3 设定密钥
创建密钥可以通过ssh远程登录
1.4 ssh远程登录
- 一种是通过密码登录
- 一种是密钥登录,此时需要将第3步中的密钥绑定到服务器系统上
说明:Ubuntu系统ssh远程登录默认关闭了root权限,需要手动更改步骤如下:
使用 ubuntu 帐户登录轻量应用服务器。
执行以下命令,设置 root 密码。
1
sudo passwd root
输入 root 的密码,按 Enter。
重复输入 root 的密码,按 Enter。返回如下信息,即表示 root 密码设置成功。
1
passwd: password updated successfully
执行以下命令,打开 sshd_config 配置文件。
1
sudo vi /etc/ssh/sshd_config
按 i 切换至编辑模式,找到 #Authentication,将 PermitRootLogin 参数修改为 yes。如果 PermitRootLogin 参数被注释,请去掉首行的注释符号 (#)。
找到 #Authentication,将 PasswordAuthentication 参数修改为 yes。说明:若 sshd_config 配置文件中无此配置项,则添加 PasswordAuthentication yes 项即可。
按 Esc,输入 :wq,保存文件并返回。
执行以下命令,重启 ssh 服务。
1
sudo service ssh restart
然后便可以在XShell上配置远程登录服务器
二.服务器端的环境部署
2.1 更新源
1 |
|

2.2 安装MySQL库
主要是安装mysql-server、mysql-client以及libmysqlclient-dev
1 |
|

2.3 安装libevent-dev的库
1 |
|

2.4 安装libjsoncpp-dev库
1 |
|

2.5 安装g++/gcc编译器
1 |
|

2.6 建立两张表user和chatgroup
运行MySQL程序:
1 |
|
创建两个数据库用于存储用户信息以及用户群组信息:
1 |
|
