Java网络聊天室——OverThinker-ChatRoom

Java网络聊天室——OverThinker-ChatRoom
—项目专栏—


🚀 Java Chatroom 实时聊天室系统

一个基于 Spring BootWebSocket 技术实现的轻量级实时聊天室项目。

✨ 项目概述

这是一个采用 前后端分离 架构的 Web 聊天应用。它专注于提供一个稳定、实时的消息通信平台,支持用户认证、好友管理、以及核心的一对一私聊功能。

特性描述
实时通信基于 WebSocket 实现,消息秒级推送。
核心功能用户注册登录、好友列表、私聊会话、消息历史记录。
后端架构Spring Boot 配合 MyBatis,快速构建 RESTful API。
前端技术传统 HTML/CSS/JavaScript + jQuery,轻量易维护。

📸 界面展示 (Screenshots)

登录与注册

登录页面

在这里插入图片描述

注册页面

在这里插入图片描述

聊天主界面

在这里插入图片描述


在这里插入图片描述

⚡ 项目体验说明

先看说明!!!

目前该项目已部署到云服务器上:
体验地址:
http://114.132.122.97:8080/login.html
开源仓库:
https://gitee.com/plthjlsh/overthinker_-chat-room (Gitee)
https://github.com/OverThinker13/OverThinker_ChatRoom (Github)
注意:
此项目暂未完善添加好友功能,因此就算注册了新用户也无法和任何人聊天,只能在我这边往数据添加好友数据才行(也可以跟我说你的用户名,我可以查到并且帮你连接对应的好友,因此我在这里提供两个匿名账号以供测试(里面的好友只有我 K以及两个相互的匿名账号好友 ),由于设置了禁止多开功能,最多同时只能有一个账号登录!如果同时登陆后来的用户会顶掉前面的用户!欢迎大家前来体验!
账号一:Thinker 密码:12208
账号二:Thinker2 密码:12208

🛠️ 技术栈一览

类别技术名称角色与描述
后端框架Spring Boot 2.7.6快速开发 Web 应用,简化配置。
实时通信Spring WebSocket实现客户端与服务器的双向持久连接。
数据访问MyBatis灵活的持久层框架,SQL 与代码分离。
数据库MySQL关系型数据库,存储用户信息和聊天记录。
构建工具Maven项目依赖管理与构建。
前端基础HTML/CSS/JS负责页面结构、样式和交互逻辑。
交互库jQuery/Ajax简化 DOM 操作和发起异步 HTTP 请求。

🏗️ 系统架构与数据流

本项目最核心的部分是 Spring Boot + WebSocket 实现的实时通信机制。

架构示意图

本项目采用经典的三层架构(Controller/Service/Dao)配合 WebSocket 的通信模型。

核心通信流程:WebSocket

  1. 用户通过 HTTP /login 登录成功后,获取会话信息。
  2. 用户发起 WebSocket 连接请求到 /WebSocketMessage
  3. 服务器将用户 ID 和对应的 WebSocket 会话 (Session) 绑定存储。
  4. 用户 A 发送消息到服务器(通过 WebSocket)。
  5. 服务器根据消息中的目标用户 ID 查找对应的 WebSocket Session。
  6. 服务器通过目标 Session 将消息实时推送给用户 B。

📁 项目结构概览

清晰的模块化结构,便于开发者理解和维护:

java_chatroom/ ├── src/ │ ├── main/ │ │ ├── java/com/example/java_chatroom/ │ │ │ ├── api/ # 🌐 Controller 层 │ │ │ ├── component/ # 🔌 组件类 │ │ │ ├── config/ # ⚙️ 配置类 │ │ │ └── model/ # 📦 数据模型 │ │ ├── resources/ │ │ │ ├── mapper/ # 📜 MyBatis XML 映射文件 │ │ │ └── static/ # 🖥️ 前端静态资源 (HTML/CSS/JS) │ │ └── db.sql # 💾 数据库初始化脚本 ├── pom.xml # Maven 依赖配置 └── README.md # 项目说明文档 (当前文件) 

🗃️ 数据库设计 (MySQL)

系统采用 5 个核心数据表来实现用户关系和消息存储。

核心表结构关系图

关键数据表

在这里插入图片描述

表名描述关键字段关系说明
user用户基本信息userId, username, password存储登录凭证
friend用户好友关系userId, friendId记录谁是谁的好友
message_session会话信息sessionId, lastTime私聊会话的主键
message_session_user会话用户关联sessionId, userId多对多:一个会话关联多个用户 (用于扩展群聊)
message消息内容messageId, fromId, sessionId, content, postTime存储具体的聊天记录

🎯 核心功能模块与 API

项目主要通过 RESTful API 和 WebSocket 端点实现功能。

认证与用户信息

模块接口/端点方式描述
用户注册/registerPOST创建新用户
用户登录/loginPOST校验并建立用户会话
获取信息/userInfoGET获取当前登录用户的基本信息

好友与会话管理

模块接口/端点方式描述
获取列表/friendListGET查看当前用户的所有好友
获取列表/sessionListGET查看所有进行中的私聊会话
创建会话/sessionPOST与指定好友创建一个新的会话

消息服务

模块接口/端点方式描述
历史消息/messageGET根据 sessionId 分页获取历史聊天记录
实时推送/WebSocketMessageWebSocket核心:建立实时双向通信通道

⚙️ 环境与运行指南

🔧 运行环境要求

  • Java Development Kit (JDK): 1.8 或更高版本
  • MySQL Server: 5.7 或更高版本
  • Maven: 3.6 或更高版本

📥 步骤

  1. 初始化数据库:
    • 确保 MySQL 服务运行,并创建一个名为 java_chatroom 的数据库。
    • 打开 src/main/resources/application.yml 文件。
    • 修改 usernamepassword 为您的 MySQL 账户信息。
  2. 访问应用:
    打开浏览器访问:http://localhost:8080/login.html

运行项目:

mvn clean install# 编译和打包 mvn spring-boot:run # 启动 Spring Boot 应用

配置数据库连接:

spring:datasource:# ... url: jdbc:mysql://127.0.0.1:3306/java_chatroom? ...username: root password: your_password # <-- 替换您的密码

执行 SQL 脚本:

mysql -u root -p < src/main/java/db.sql 

克隆项目:

git clone <repository-url>

🌟 功能特性总结

  1. 用户认证体系:
    • 支持用户注册新账号。
    • 实现基于会话的登录校验。
  2. 高效实时通信:
    • 利用 WebSocket 实现消息的毫秒级推送。
    • 支持一对一私密聊天。
  3. 完善的消息与会话管理:
    • 自动管理私聊会话的创建与激活。
    • 持久化存储消息记录,支持查看历史消息。
  4. 基础的好友关系:
    • 展示当前用户的好友列表。

💡 Future Enhancements (未来展望)

本项目可进一步扩展以实现更丰富的功能:

  • 好友请求功能: 实现用户搜索、发送/接受好友请求的完整流程 (当前需手动修改 DB)。
  • 个性化展示: 用户添加头像,个性签名等。
  • 群聊支持: 扩展会话模型,支持多人聊天室和群组管理。
  • 消息类型扩展: 支持发送图片、文件和表情包。
  • 用户状态管理: 实时显示用户的在线/离线状态和最后活跃时间。
  • UI/UX 优化: 引入更现代的前端框架或库,实现响应式设计。

在这里插入图片描述

Read more

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用

Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用 Python操作国产金仓数据库(KingbaseES)全流程:从环境搭建到实战应用,大家好,我是 xcLeigh。现在国产化数据库越来越普及,金仓数据库(KingbaseES)作为一款超实用的企业级关系型数据库,在政府、金融、能源这些关键领域用得特别多。今天我就带大家从零开始,一步步学会用Python操作金仓数据库,从环境准备、连接数据库,到CRUD核心操作、事务处理,再到常见问题排查,内容全是干货,代码拿过去就能用,就算是新手也能很快上手! 前言     中电科金仓(北京)科技股份有限公司(以下简称“电科金仓”)成立于1999年,是成立最早的拥有自主知识产权的国产数据库企业,也是中国电子科技集团(CETC)成员企业。电科金仓以“提供卓越的数据库产品助力企业级应用高质量发展”为使命,致力于“成为世界卓越的数据库产品与服务提供商”。     电科金仓自成立起始终坚持自主创新,专注数据库领域二十余载,具备出色的数据库产品研发及服务能力,核心产品金仓数据库管理系统KingbaseES(简称“KES”

By Ne0inhk
Python 多线程日志错乱:logging.Handler 的并发问题

Python 多线程日志错乱:logging.Handler 的并发问题

Python 多线程日志错乱:logging.Handler 的并发问题 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的蝴蝶。 🔬 每一次代码审查都是我的显微镜观察,每一次重构都是我的化学实验。 🎵 在编程的交响乐中,我既是指挥家也是演奏者。让我们一起,在技术的音乐厅里,奏响属于程序员的华美乐章。 目录 Python 多线程日志错乱:logging.Handler 的并发问题 摘要 1. 问题现象与复现 1.1 典型的日志错乱场景 2. logging模块的线程安全机制分析 2.1 Handler级别的线程安全 2.2 锁竞争的性能影响分析 3. 深入源码:竞态条件的根本原因 3.1 Handler.emit()方法的竞态分析 3.2 I/O操作的原子性问题

By Ne0inhk
【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!

【C++高并发内存池篇】ThreadCache 极速引擎:C++ 高并发内存池的纳秒级无锁革命!

📌本篇摘要 📝本篇为高并发内存池项目的正式开篇,通过把项目拆成一部分一部分去实现,这里会分成ThreadCache,CentralCache,PageCache等三部分去分部实现内存池,这里就通过一步步分析来简单实现ThreadCache这步(可能会不完整,后续继续补充),欢迎阅读! 🏠欢迎拜访🏠:点击进入博主主页 📌本篇主题📌:ThreadCache框架部分简单实现 📅制作日期📅:2025.08.25 🧭隶属专栏🧭:点击进入所属C++高并发内存池项目专栏 一· 💡concurrent memory pool整体轮廓分析 分为三部分: * 线程缓存(ThreadCache):每个线程独有,用于分配小于 256KB 的内存,申请内存无需加锁,独享特性使并发线程池高效。 * 中心缓存(CentralCache):所有线程共享,ThreadCache 能按需从其获取对象,CentralCache也负责回收ThreadCache 对象以均衡内存分配,因存在竞争,取内存对象需加桶锁,但竞争不激烈。 页缓存(PageCache):位于 CentralC

By Ne0inhk

Python 全面语法指南

前言 1. 什么是编程? 编程就像是教电脑做事的过程。想象你有一个非常听话但很笨的助手,你需要用它能理解的语言(编程语言)一步一步地告诉它该做什么。 * 你 = 程序员(下达指令的人) * Python = 你和电脑沟通的语言 * 电脑 = 执行指令的助手 2. Python 的特点 Python 之所以适合初学者,是因为它: 1. 像英语一样易读 - 代码看起来像自然语言 2. 简洁明了 - 用很少的代码完成很多功能 3. 功能强大 - 从简单计算到人工智能都能做 4. 免费开源 - 任何人都可以免费使用 3. 程序的基本结构 一个 Python 程序就像做菜的食谱: 1. 准备材料(定义变量) 2. 处理材料(执行操作) 3. 呈现结果(

By Ne0inhk