远程聊天室


引言

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权限,需要手动更改步骤如下:

  1. 使用 ubuntu 帐户登录轻量应用服务器。

  2. 执行以下命令,设置 root 密码。

    1
    sudo passwd root
  3. 输入 root 的密码,按 Enter

  4. 重复输入 root 的密码,按 Enter。返回如下信息,即表示 root 密码设置成功。

    1
    passwd: password updated successfully
  5. 执行以下命令,打开 sshd_config 配置文件。

    1
    sudo vi /etc/ssh/sshd_config
  6. i 切换至编辑模式,找到 #Authentication,将 PermitRootLogin 参数修改为 yes。如果 PermitRootLogin 参数被注释,请去掉首行的注释符号 (#)

  7. 找到 #Authentication,将 PasswordAuthentication 参数修改为 yes。说明:若 sshd_config 配置文件中无此配置项,则添加 PasswordAuthentication yes 项即可。

  8. Esc,输入 :wq,保存文件并返回。

  9. 执行以下命令,重启 ssh 服务。

    1
    sudo service ssh restart
  10. 然后便可以在XShell上配置远程登录服务器

二.服务器端的环境部署

2.1 更新源

1
sudo apt-get update
更新源

2.2 安装MySQL库

主要是安装mysql-server、mysql-client以及libmysqlclient-dev

1
sudo apt-get install mysql-server mysql-client libmysqlclient-dev 
服务器端安装MySQL库

2.3 安装libevent-dev的库

1
sudo apt-get install libevent-dev
服务器端安装Libevent库

2.4 安装libjsoncpp-dev库

1
sudo apt-get install libjsoncpp-dev
服务器端安装JSON库

2.5 安装g++/gcc编译器

1
sudo apt-get install gcc g++
服务器端安装gcc和g++库

2.6 建立两张表user和chatgroup

运行MySQL程序:

1
mysql -u root -p

创建两个数据库用于存储用户信息以及用户群组信息:

1
2
create database user;
create database chatgroup;
创建两个MySQL数据库

远程聊天室
http://example.com/2022/05/03/远程聊天室/
作者
DustWind
发布于
2022年5月3日
许可协议