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

聊天交友趣平台——介绍

文章目录

  • 聊天交友趣平台——介绍
    • 一、应用技术
    • 二、系统简介及功能
    • 三、设计思路
    • 四、过程回顾和收获总结

该项目前后端是作者 独立设计开发 完成 的,以锻炼自己的设计思维以及动手能力为初衷,过程中遇到很多困难,最后还是通过翻阅资料学习化解了。

另外,考虑到用户量少,交友范围小,作者特地实现了随机匹配聊天功能,这样就完美解决了交友问题。

部署地址:体验——聊天交友趣平台

一、应用技术

  • 前端

    Thymeleaf、Bootstrap、JQuery、

  • 后端

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

二、系统简介及功能

系统实现了以下几部分:

  • 注册登录

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

  • 个人资料卡

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

  • 聊天

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

  • 好友

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

  • 特色动态模块

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

主页面展示:
独立开发的基于springboot + websocket IM网站聊天系统总结_第1张图片

三、设计思路

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

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

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

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

四、过程回顾和收获总结

  • Websocket

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

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

  • 头像上传

    这里在服务器端搭建了开源图床,通过特定接口可以将图片上传,数据库存储图片地址。这里花费时间最多的是图片裁剪,在头像上传时保证图片比例是1:1。
    独立开发的基于springboot + websocket IM网站聊天系统总结_第2张图片

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

  • 消息推送

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

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

  • 消息本地化存储

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

  • 随机匹配

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

    独立开发的基于springboot + websocket IM网站聊天系统总结_第3张图片

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

你可能感兴趣的:(后端,java,spring,boot,websocket,redis,rabbitmq)