聊天室项目

一.项目功能

1.账号管理

登录、注册
找回密码 

2.好友管理

私聊(实时性)
好友的添加、删除、查询
查看好友列表
显示好友状态(在线与否)
查看聊天记录
屏蔽好友消息

3.群管理

群聊(实时性)
群的创建、解散(群主才有的权限)
申请加群、退群
查看已加群、查看群成员
查看聊天记录
设置群管理员
踢人(群主或管理员才有的权限)

4.发送文件

文件传输

5.关于客户端与服务器要求

稳定性
要能处理大量客户端的连接与信息处理、传输
服务器稳定,不会因客户端的意外情况退出
数据正常接受、处理、发送
有容错处理,避免因非法输入导致C/S崩溃
高效性
服务器日志,记录服务器的状态信息

7.相关技术要求

I/O 多路复用(epoll)
mysql

二.开发环境及工具:

	Ubuntu 20.04.2 LTS    x86-64
	vscode
	gcc 9.3.0

三.基础架构

1.server

服务器端采用epoll+多线程模式达到处理大量客户端的连接与信息处理、传输,每当客户端发来一个请求时开一个线程进行处理,处理完之后对线程进行销毁。
但当大量客户端同时向服务器发送请求时,线程创建、销毁、切换的开销较大,服务器效率会下降很多。
在这里插入图片描述

2.client

客户端首先创建一个用来接收服务器数据的线程并加到数据队列中,主线程主要是主体逻辑的实现。

3.数据存储

主要用到mysql

表名存放
login_info个人信息
friends好友关系
friend_msg私聊消息
group_info群聊信息
group_management群聊关系管理
group_msg群聊消息

在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

四.一些实现思路

私聊、群聊、文件传输的实现都是由客户端发到服务器,再由服务器发送到目标客户端。

1.客户端接收数据

前面说到了客户端会有一个专门用来接收数据的线程以及一个数据队列,客户端向服务器发送请求后,会阻塞等待来自服务器的一些数据和反馈,当接收线程接收到数据后会唤醒主线程并加锁存到数据队列中,而主线程会阻塞判断数据队列中是否有数据,如果有数据则加锁读出数据队列中的数据进行之后的操作。

2.文件传输

由于服务器的epoll架构会在同一个地方接收客户端的所有请求和数据,但我想保证在文件传输过程中数据的连续以及传输效率,所以会把该客户端的socketfd从epoll中摘下来,单独接收文件数据,接收完成后再加到epoll中进行后面操作的处理。

五.项目展示

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六.源码

github

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaWeb聊天室项目是基于JavaWeb技术开发的在线聊天系统。它允许用户通过浏览器或客户端应用程序进行实时的文字、图片、文件等多媒体信息的交流和分享。 该项目的主要功能包括用户注册登录、创建聊天室、加入聊天室、发送消息、接收消息等。下面是该项目的一般实现步骤: 1. 环境搭建:安装Java开发环境(如JDK)、Web服务器(如Tomcat)、数据库(如MySQL)等。 2. 创建数据库:设计并创建数据库表,包括用户表、聊天室表、消息表等。 3. 用户注册登录:实现用户注册和登录功能,包括用户信息的验证和存储。 4. 创建聊天室:用户可以创建自己的聊天室,并设置聊天室的名称、密码等。 5. 加入聊天室:用户可以通过输入聊天室名称和密码来加入已存在的聊天室。 6. 发送消息:用户可以在聊天室中发送消息,包括文字、图片、文件等。 7. 接收消息:用户可以实时接收其他用户发送的消息,并在界面上展示。 8. 聊天记录存储:将聊天室中的消息进行存储,以便用户可以查看历史消息。 9. 安全性处理:对用户输入进行合法性验证,防止恶意攻击和非法操作。 10. 界面设计:设计用户友好的界面,提供良好的用户体验。 以上是一个简单的JavaWeb聊天室项目的基本实现步骤,具体的实现方式和技术选型可以根据实际需求和个人喜好进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值