• 独立开发的基于springboot + websocket IM网站聊天系统总结


    做这个的初衷就是为了独立的完完整整将一个项目从设计、开发、部署,进而锻炼自己的设计思维以及动手能力,虽然有些地方可能不太完美,但是我想毕竟一个人的力量是有限的,或许这就是团队配合的魅力吧。

    一、系统简介及功能

    聊天系统名就叫做青云志吧,不坠青云之志。系统大致实现了以下几部分:

    • 注册登录
      这部分实现了分布式登录、密码加密存储、恶意登录拦截功能。

    • 个人资料卡
      实现了图片上传、图像在服务器端本地化存储和获取、信息修改功能。

    • 聊天
      实现了基本聊天功能,包括在线消息发送和接收、离线消息接收、消息本地化存储、最近联系人功能。

    • 好友
      实现了好友上下线状态推送、好友查找添加以及通知、查看对方资料卡功能。

    • 特色动态模块
      实现了随机匹配聊天、世界窗口聊天(可与所有在线者进行在线聊天)、网页娱乐游戏功能。

    主页面展示:
    在这里插入图片描述

    二、设计思路

    系统必不可缺的就是注册登录,采用验证码注册、分布式存储Cookie、恶意登录拦截(后续规模大的话可能会升级成发送邮件注册)。

    考虑到是一个聊天系统,因此参考了VXQQ这种大型聊天应用,必不可缺的就是一些能添加好友、在线聊天、离线消息缓存等基本功能。

    解决了这些基础功能之后,又考虑到这个系统使用规模并不大,可能都没有好友去加(这样连聊天对象都没有,聊天功能也就只能是一个花瓶了),所以想到通过增加交友途径去解决,这里我采用了世界窗口和随机匹配聊天功能去解决,随机匹配到对方,这样就可以认识到更多新朋友了。

    最后考虑到为了增添一些趣味性,在特色动态模块加了游戏推荐进行跳转。

    三、用到的技术

    • 前端

      Thymeleaf、Bootstrap、JQuery、

    • 后端

      SpringBoot、MySQL、MyBatis-Plus、Redis、RabbitMQ、WebSocket

    四、过程回顾和收获总结

    • Websocket

      第一次接触在线聊天的项目,即时通信技术上可以说是毫无经验,后来了解到Websocket、Netty技术可以解决即时通信问题,最终考虑到快速上手即使用了websocket。websocket本质上是一个基于TCP的协议,客户端发起http请求,经过3次握手后与服务端建立TCP连接(http请求里存放WebSocket支持的版本号等信息),这时客户端和服务端的websocket借助于TCP传输信道进行全双工通信

      参考文章:websocketWebSocket实现后台向前端推送信息

    • 头像上传

      ​ 这里在服务器端搭建了开源图床,通过特定接口可以将图片上传,数据库存储图片地址。这里花费时间最多的是图片裁剪,在头像上传时保证图片比例是1:1。
      在这里插入图片描述

      参考文章:腾讯云轻量应用服务器搭建lsky图床并使用KODO云存储利用canvas压缩图片并上传

    • 消息推送

      用户发送消息:客户端判断接收用户是否在线,然后走不同的处理方式,如果离线存储到redis、等待用户上线接受,如果在接根据WebSocketSession推送;

      用户上下线通知:用户登录成功后,也就是用户上线,将上线消息放入消息队列,异步处理推送给在线好友,这样的话也提高了处理用户登录请求速度,下线同理;

    • 消息本地化存储

      本地化存储的主要有最近消息列表,聊天消息内容,通过浏览器的localstore缓存到本地

    • 随机匹配

      第一次做匹配功能,在网上找了找,关于这方面的比较少,而且也不合适。所以只好按自己的想法来了。在服务器端准备阻塞队列,并设置一个线程执行定时任务,每次将队列中的任务两两匹配,如果最后剩余一个任务就加入到下一个周期中,当超过两次没有匹配成功,丢弃任务通知失败;若两两匹配成功后,在内实现相关算法生成秘钥,再通知对方成功,这样也算保障了安全,避免一部分人直接通过地址闯入匹配聊天页。

    在这里插入图片描述
    这个项目从五月开始,用了大概一个多月时间,因为之前自己项目经历实在太拉了,于是借着空闲时间弥补一下缺陷。最近8月份也要准备秋招了,好好调整调整状态,继续加油吧!!

  • 相关阅读:
    计算机组成原理学习笔记:计算机的发展历程
    c语言(函数栈帧的创建和销毁)
    Git工具的使用
    IQtree:使用 SNP 数据(vcf file)构建玉米群体的系统发育树
    postman断言详解
    高等教育心理学:问题解决与创造性
    网络安全(黑客)自学
    如何优化供应商采购系统,提升供应商管理和采购流程效能
    第六篇:常用Linux命令
    一文搞懂什么是kubernetes Service
  • 原文地址:https://blog.csdn.net/weixin_46804107/article/details/126127702