聊天室

项目需求

账号管理

  • 实现登录、注册、注销
  • 实现找回密码(提高)

好友管理

  • 实现好友的添加、删除、查询操作
  • 实现显示好友在线状态
  • 禁止不存在好友关系的用户间的私聊
  • 实现屏蔽好友消息
  • 实现好友间聊天

群管理

  • 实现群组的创建、解散
  • 实现用户申请加入群组
  • 实现用户查看已加入的群组
  • 实现群组成员退出已加入的群组
  • 实现群组成员查看群组成员列表
  • 实现群主对群组管理员的添加和删除
  • 实现群组管理员批准用户加入群组
  • 实现群组管理员/群主从群组中移除用户
  • 实现群组内聊天功能

聊天功能

对于 私聊和群组 的聊天功能均需要实现:

  • 实现查看历史消息记录
  • 实现用户间在线聊天
  • 实现在线用户对离线用户发送消息,离线用户上线后获得通知
  • 实现文件发送的断点续传
  • 实现在线发送文件
  • 实现在线用户对离线用户发送文件,离线用户上线后获得通知/接收

服务器

1.使用epoll监听套间字,使用epoll监听客户端是否有读操作,如果有读操作,就将该套间字从监听红黑树摘下,然后读取客户端发送的要执行的操作,将操作放入线程池队列中执行,等操作执行完再将套间字放到监听红黑树上。

2.ET边沿触发模式

3.使用redis数据库

4.使用nlohmann/json序列化和反序列化

5.使用线程池对任务进行处理

客户端

1.使用两个线程,一个线程从服务器读取数据,实现弹窗功能,即有人添加好友或有人发送消息会有一个消息提示。
2.聊天的时候创建一个新线程,一个线程专门用来发送消息,一个线程专门用来读取消息。聊天结束后读取的线程自动销毁。

代码github地址

https://github.com/c1336658570/task/tree/main/chatroom

Linux下实现聊天室相关推荐

  1. linux下多进程聊天室,从0实现基于Linux socket聊天室-多线程服务器模型-1

    前言 Socket在实际系统程序开发张中,应用非常广泛,也非常重要.实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要.高并发服务器从简单的循环服务器模型处理少量网络并发请求 ...

  2. Linux多人聊天室之后篇

    文章目录 前言 一.前期工作 二.项目框架 三.伪代码流程 四.源代码 五.结果显示 附录 前言 本文承接上一篇<Linux多人聊天室之前篇>的内容,记录的是多人聊天室室如何实现的. 一. ...

  3. 基于Linux实现的聊天室小程序

    基于linux平台制作的简单聊天室程序,可以通过修改宏定义USER_LIMIT进而修改支持的用户个数 不涉及任何外部库,直接g++编译即可 涉及到:socket编程,零拷贝文件描述符数据splice, ...

  4. linux大作业聊天室报告,Linux聊天室系统期末大作业.docx

    NANCHANG UNIVERSITY <Linux 系统编程>课程设计 题目:Linux 聊天室报告 学院:软件学院 专业:计算机软件 班级:计软 121 班 姓名:李俊楠 起讫日期: ...

  5. Linux多人聊天室之前篇

    文章目录 前言 一.聊天模式框架 二.代码 三.结果显示: 四.网络编程通用API汇总 前言 本文的内容是多人聊天室的前期工作,记录的是一个客户端和一个服务端聊天,尚未涉及到多线程.若想看多线程的内容 ...

  6. Linux网络编程--聊天室客户端程序

    聊天室客户端程序 #define _GNU_SOURCE 1 #include <sys/types.h> #include <sys/socket.h> #include & ...

  7. linux多人聊天室 qt,Qt编程详解--网络通信之基于TCP的多人聊天室

    一.了解TCP的通信过程 Qt中封装了TCP协议 QTcpServer类负责服务端: 1.创建QTcpServer对象 2.监听listen需要的参数是地址和端口号 3.当有新的客户端连接成功时会发射 ...

  8. Linux下的聊天软件

    1.米聊.界面还可以. 官网:http://www.miliao.com/pc_introduction.html 2.点"立即下载",选择linux版本.安装版. ------- ...

  9. Linux 命名管道 聊天室

    目录 一.功能说明 二.Bug集中营 2.1 关于群聊的问题 2.2 关于私聊的问题 2.3 关于用户名的问题 2.4 关于客户端界面的问题 2.4.1 时间显示问题 2.4.2 握手消息问题 2.5 ...

最新文章

  1. 教师教学的“五个转化”能力
  2. 学习是一个漫长不能松懈的过程
  3. 判断一个数组是否是另一个数组的子集
  4. nginx下部署vue项目
  5. 白瑜庆:知乎基于Kubernetes的kafka平台的设计和实现
  6. [vue] vue生命周期总共有几个阶段?
  7. java创建文件夹和文件_Java创建文件夹与创建文件
  8. ann matlab,MatlabANN工具箱实用指南.doc
  9. LabVIEW编程LabVIEW开发研华PCI 1756例程与相关资料
  10. Composer Class Fxp\Composer\AssetPlugin\Repository\NpmRepository does not exist
  11. Python数据分析及可视化-招聘网站岗位数据分析
  12. bin文件转换成hex的方法
  13. python自动化运维平台搭建_OMserver自动化运维平台搭建及测试
  14. css margin为什么重叠,CSS 外边距(margin)重叠及防止方法
  15. 朱松纯教授:可解释性是人工智能获得人类信任的关键
  16. Untiy InputSystem(一) 新旧API对比
  17. JavaScript 前端简单工厂模式、工厂方法模式、抽象工厂模式优缺点及详解 — 设计模式《二》
  18. Python_阿里云物联网_数据/图像/音频传输
  19. 测试理论-测试用例设计 (一) --- 正交表分析法
  20. 计算机点火工作原理,简述汽车发动机ECU工作原理

热门文章

  1. 【低代码开发】智慧交管解决方案
  2. Mission Planner中级应用(APM或PIX飞控)4——无人机APM飞控硬件故障简单维修(中)
  3. 2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】
  4. 推荐最适合IT人自学的视频网站、社区网站
  5. SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式
  6. 408如何复习?浙大学长经验贴
  7. 小米MIUI降级刷机备份安装gms谷歌三件套
  8. ARKit之路-平面检测
  9. SQA,SQC是什么意思,有什么区别?
  10. PCL小工具二:使用kitti的GT(ground truth)建立激光点云地图