github仓库链接:https://github.com/SmilingSea/im_project
本项目是根据西二五轮考核要求,基于springboot与websocket实现了实时通讯的聊天室。
└─im_project
├─annotation // 自定义注解类
├─common // 静态常量
├─config // 配置类
├─controller // 接口类
├─domain // 实体类
│ ├─dao // 数据库实体
│ ├─dto // 数据传输实体
│ └─enums // 枚举类
├─exception // 自定义异常类
├─filter // 过滤器
├─handler // 拦截器
├─mapper // 数据库存储对象
├─mq // 消息队列
├─service // 服务层
│ └─impl // 服务实现类
├─socket // socket配置
└─utils // 工具类
springboot+mysql+redis+websocket+rabbitmq
- 完成了基本的模块和功能
- 支持会话列表、文字图片交流、屏蔽用户功能
参见:接口文档.md
我的环境:Ubuntu:22.04 docker:24.0.7 docker-compose:v2.22.0
- 下载Release
- 上传到服务器并解压
sudo unzip im_project-1.0.zip
- 创建该项目的镜像
sudo docker build -t im_project:v1.0 .
- 运行docker-compose
sudo docker-compose up -d
- 查看是否正常运行
sudo docker ps
- 导入数据表结构(sql文件在项目地址里面)
我部署的项目地址:http://122.51.134.156:8080
在发送消息存消息记录时,将消息对象存入rabbitmq,防止因数据库操作耗时导致发送消息延迟。
通过树状结构存入敏感词并进行查找,在敏感词词库数量大时,相对于直接查找敏感词效率更高。
使用Restful风格代码,注释完善。
为了避免在每个需要验证token的接口中都写一遍验证token是否为空的具体实现,使用自定义注解来实现,在需要验证token的接口上添加这个注解。
- 可以通过springsecurity框架实现鉴权功能,并实现群主、管理员等权力层级(但是时间有点点不够,springsecurity还没学透)
- 感觉数据库的设计上还有点小漏洞
通过这次任务我掌握了websocket的后台开发。这一轮对我最大的收获是我逐渐学会去网上看具体的文章和博客来解决具体的问题。没有只是看一个教学视频然后跟着做。这一轮锻炼了我上网查找资料看博客的学习效率,提升了根据需求独立解决问题的能力。