做这个的初衷就是为了独立的完完整整将一个项目从设计、开发、部署,进而锻炼自己的设计思维以及动手能力,虽然有些地方可能不太完美,但是我想毕竟一个人的力量是有限的,或许这就是团队配合的魅力吧。
聊天系统名就叫做青云志吧,不坠青云之志。系统大致实现了以下几部分:
注册登录
这部分实现了分布式登录、密码加密存储、恶意登录拦截功能。
个人资料卡
实现了图片上传、图像在服务器端本地化存储和获取、信息修改功能。
聊天
实现了基本聊天功能,包括在线消息发送和接收、离线消息接收、消息本地化存储、最近联系人功能。
好友
实现了好友上下线状态推送、好友查找添加以及通知、查看对方资料卡功能。
特色动态模块
实现了随机匹配聊天、世界窗口聊天(可与所有在线者进行在线聊天)、网页娱乐游戏功能。
主页面展示:

系统必不可缺的就是注册登录,采用验证码注册、分布式存储Cookie、恶意登录拦截(后续规模大的话可能会升级成发送邮件注册)。
考虑到是一个聊天系统,因此参考了VX、QQ这种大型聊天应用,必不可缺的就是一些能添加好友、在线聊天、离线消息缓存等基本功能。
解决了这些基础功能之后,又考虑到这个系统使用规模并不大,可能都没有好友去加(这样连聊天对象都没有,聊天功能也就只能是一个花瓶了),所以想到通过增加交友途径去解决,这里我采用了世界窗口和随机匹配聊天功能去解决,随机匹配到对方,这样就可以认识到更多新朋友了。
最后考虑到为了增添一些趣味性,在特色动态模块加了游戏推荐进行跳转。
前端
Thymeleaf、Bootstrap、JQuery、
后端
SpringBoot、MySQL、MyBatis-Plus、Redis、RabbitMQ、WebSocket
Websocket
第一次接触在线聊天的项目,即时通信技术上可以说是毫无经验,后来了解到Websocket、Netty技术可以解决即时通信问题,最终考虑到快速上手即使用了websocket。websocket本质上是一个基于TCP的协议,客户端发起http请求,经过3次握手后与服务端建立TCP连接(http请求里存放WebSocket支持的版本号等信息),这时客户端和服务端的websocket借助于TCP传输信道进行全双工通信。
头像上传
这里在服务器端搭建了开源图床,通过特定接口可以将图片上传,数据库存储图片地址。这里花费时间最多的是图片裁剪,在头像上传时保证图片比例是1:1。

消息推送
用户发送消息:客户端判断接收用户是否在线,然后走不同的处理方式,如果离线存储到redis、等待用户上线接受,如果在接根据WebSocketSession推送;
用户上下线通知:用户登录成功后,也就是用户上线,将上线消息放入消息队列,异步处理推送给在线好友,这样的话也提高了处理用户登录请求速度,下线同理;
消息本地化存储
本地化存储的主要有最近消息列表,聊天消息内容,通过浏览器的localstore缓存到本地
随机匹配
第一次做匹配功能,在网上找了找,关于这方面的比较少,而且也不合适。所以只好按自己的想法来了。在服务器端准备阻塞队列,并设置一个线程执行定时任务,每次将队列中的任务两两匹配,如果最后剩余一个任务就加入到下一个周期中,当超过两次没有匹配成功,丢弃任务通知失败;若两两匹配成功后,在内实现相关算法生成秘钥,再通知对方成功,这样也算保障了安全,避免一部分人直接通过地址闯入匹配聊天页。

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