博客论坛开发
张创琦 2022.09.11
文章目录
前言:本项目是一个比较经典的前后端开发系统,本人主要负责后端,本篇文章主要围绕着开发背景、技术架构、功能介绍、后期优化等部分进行介绍。是一个侧重于业务场景的项目,但又不同于网上的教学视频所教授的项目,本项目会考虑到后期上线,确保是一个真实可用的网站,当然,业务处理各种线上
bug
。
1 背景
1.1 业务背景
本项目的开发背景是大学群体一些学习问题的解决,比如学习资料的下载与上传、一个可以发帖和聊天的工具(论坛机制)、对网络上优秀链接的汇总等等,我们会围绕着这些需求展开对网站的开发(业务驱动)。
1.2 技术背景
本着在大学多去提高技术,不荒废时光的原则,我努力让自己多学习新的技术,然后将技术应用于各个现实应用场景之中。比如此项目的基本架构采用的是Java
+SpringBoot
+MySQL
+Redis
等等,项目中也用到了像kafka
,Elastic Search
,Fast DFS
等中间件。
2 技术选型
语言:Java
框架:SpringBoot
+MyBatis
通信协议:HTTP
数据库:MySQL
缓存:Redis
消息队列:Kafka
搜索功能:Elastic Search
文件存储:Fast DFS
3 网站功能介绍
3.1 注册登录
由于后期会用到登录用户的各种信息,比如邮箱、手机号码、性别等等,故用户需要先登录(未登录的用户需要先注册)。
注册需要“邮箱”+“密码”+“确认密码”+“邮箱验证码”,注册成功后头像和用户名自动分配。
注册需要保证邮箱的准确性,且确保可以正常接收消息,故会像邮箱发送验证码,此处采用的技术是SpringBoot
的mail
功能(https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-mail)。
用户接收到邮箱后会将用户邮箱信息和验证码进行缓存,5分钟内有效,1分钟后可以重新发送验证码,但获取到的还是原来未过期的验证码。
注册采用的是同步请求,将用户信息插入到数据库,跳转到主页面。
登录采用的是“邮箱/手机号/用户名”+“密码”+“图形验证码”机制,图形验证码调用第三方库kaptcha
(github开源项目)(https://mvnrepository.com/artifact/com.github.penggle/kaptcha),需要用户手动输入四位模糊数字或字母。
3.2 沸点链接
此功能主要用于汇总互联网的优秀网站链接,方便同学们的使用,也给同学们提供更广阔的平台。也可以将我们网站上的优秀文章进行汇总。
此处开发技术难度不大,主要涉及链接的查询,但功能比较实用,故保留。
沸点链接包括增加(所有权限的用户均可发表)、收藏、删除、列表显示等等。
用户每点击一次后我们都要保证阅读量加1,故需要Redis
的字符串进行计数加一。此处需要设置为synchronized
。
3.3 帖子
发帖是我们网站非常重要的功能。
帖子详情页包括的功能有帖子具体内容展示,包括标题、内容、上一篇和下一篇的链接点击,评论,转发,收藏,还包括用户每个月的发帖数量汇总。右边还有相关的推荐功能。
发布帖子支持两种格式的文本,分别为富文本编辑器和Markdown编辑器,用户可根据自己的喜好进行切换。前端也实现了每隔一段时间进行一次内容存储,也就是存草稿功能。
帖子修改也是一项重要的功能,修改帖子完成后后台会标记用户最后的修改时间。且修改内容会有一定的限制(我们会建议用户加分割线,然后再下方填写修改内容,参考知乎APP)。
帖子列表是对数据库中的帖子进行查询展示,用户鼠标悬停在用户信息上也会显示用户的个人信息已经发帖情况。
发帖过程中考虑到屏蔽关键词,一些敏感词汇会被屏蔽到,并且会变成**样式(采用Trie
树实现)。
3.4 个人信息修改
用户可以修改自己的信息,管理员身份的人也可对用户的信息进行修改。修改信息包括昵称、绑定邮箱、绑定手机号、性别等等个人信息。
3.5 文件上传下载
文件上传下载采用了余庆大佬开发的Fast DFS
技术,此技术会将文件上传到Linux
服务器上,用户可在网站上对文件进行上传下载的操作。
3.6 搜索
用户可以在相应页面的搜索栏中输入关键词进行搜索。我们会匹配将每篇文章的标题和内容进行匹配。此功能采用Elastic Search
实现。
3.7 静态资源处理
静态数据包括图片、音频、视频等资源。我们会将静态资源放到服务器的特殊的地方,然后会将访问地址放到数据库中来访问静态数据。
(此功能暂未开发)
3.8 用户收藏功能
用户收藏的内容会存放到本人的收藏夹中进行展示。包括用户收藏的沸点链接和帖子。
3.9 系统通知
每当其它用户对本人的帖子进行评论点赞收藏或者对本人的沸点链接进行收藏等等的时候,系统会对本人发送一条系统通知,来告诉用户此信息。此功能通过kafka
实现。
3.10 推荐
推荐功能本是一个比较偏重于算法岗工作的内容,但本项目开发并没有算法岗成员,并且帖子和链接数量也不算多,所以我们无法实现精准推送,但是会给用户推送一些与所选内容相关性较高的帖子。
3.11 排行榜
排行榜包括综合排行榜、发帖排行榜、沸点链接排行榜、评论数量帮行榜等等,不管什么形式的排行榜,先把前期的业务逻辑设计完整,然后可以通过redis
的zset
实现。
3.12 好友、关注、共同关注、粉丝等等
此功能主要为用户之间的交互。其中着重讲一下共同关注的开发,共同关注通过redis
的set
实现(可以通过高中数学学过的求交集运算来理解)。