# wego
校园社区论坛项目
## 1.项目简介
>下面主要来介绍下项目的需求:
(1)系统实现手机号+验证码、手机号+密码的注册方式,实现手机号+验证码、手机号+密码、Github登录、QQ登录的登录方式,并使用cookie保存用户登录信息。
(2)系统实现用户可以根据不同的文章分类来发表文章、编辑文章、删除文章、搜索文章、对文章进行点赞、评论、查看热点文章等。
(3)系统实现用户的个人中心,用户可以查看个人信息、更新个人信息、关注/取消关注别人、关注/粉丝列表、我的消息、我的私信、用户成就值排行榜等。
(4)系统实现类似于QQ一对一的私信。 (实际并没有做完,难顶)
该项目主要采用前后端分离的开发方式,本人主要负责后端所有功能实现。
后端技术栈为:SpringBoot+SpringMVC+Mybatis+Redis+ELK+Quartz+websocket
前端技术栈为:Vue.js+ElementUI+axios
>
### 项目部分功能设计思路
#### 1.1 手机号+验证码的实现思路
>验证码服务使用是腾讯云提供的短信验证码服务,腾讯云会有200条的免费短信进行测试,首先需要在腾讯云中进行实名认证,发送短信的话,需要在腾讯云中创建签名、创建模板等,[参考链接](https://console.cloud.tencent.com/smsv2).<br/>后端主要需要完成的就是随机的生成6位的验证码,将验证码存在redis中,设置3min的过期时间,在登录注册的时候,只需将用户在前端对话框中输入的验证码和redis存储的验证码进行对比,如果匹配则可进行登录成功,否则提示用户验证码输入错误.
使用腾讯云手机验证码的Java的SDK参考代码为:[链接](https://cloud.tencent.com/document/product/382/43194)
>
#### 1.2 第三方登录(Github/QQ)实现思路(以Github实现为例)
>第三方登录的原理:
1.网站让用户跳转到Github
2.Github要求用户登录,然后询问A网站要求获取XX权限,你是否同意?
3.用户同意,Github就会重定向会A网站,同时返回一个授权码code(这里去请求回调地址的接口)
4.网站使用授权码,想Github请求令牌(在回调地址的接口中继续想Github中发送请求,请求获取令牌,令牌即TOKEN)
5.Github返回令牌
6.网站使用令牌,想Github请求用户数据
>
#### 1.3 查看热点文章实现思路
>热点文章设计为:根据文章的浏览量降序排列,取TOP10进行展示
#### 1.4 上传图片(使用七牛云服务器存储图片)实现思路
>上传用户头像、修改用户头像操作将图片上传至七牛云服务器上,自己上传了一张照片,返回的[在线地址](http://wegocoder.top/FggcekLfLIZVrXgFgl0IhH0rZ1T3),这样就减少数据库存储图片带来的性能开销,在使用七牛云服务器的时候,需要在七牛云上进行实名认证,以及获取对应的accessKey、secretKey信息,自己设置bucket、domain信息,具体参考官网给出Java的SDK参考代码为:[链接](https://developer.qiniu.com/kodo/1239/java)
#### 1.5 关注/取消关注别人,关注/粉丝列表实现思路
>基于Redis的Set数据结构实现,原因是该结构类似于Java中的Hashset,可以实现去重功能,用sadd、scard来实现即可.
#### 1.6 用户成就值排行榜实现思路
>成就值加分规则:
当用户发表一篇文章的时候,成就值+10分
当用户的文章被别人点赞一次之后,成就值+5分
当用户的文章被别人评论一次之后,成就值+5分
当用户被一个人关注后,成就值+10分
实现思路:使用Quartz定时器框架,每一个月将用户的成就值清零,在这一个月之内根据用户的成就值降序排列,取成就值TOP10.
### 项目重难点功能设计思路
#### 1.1 异步通知功能设计
>一般我们在购物或者博客的网站上都会收到系统推送的通知消息,而对应于校园论坛网站的开发中,我自己设计为当用户A对用户B发表的文章点赞、评论、以及用户A关注了用户B,都用到了异步通知的设计。
异步通知和同步通知(以点赞业务为例)的区别是:
* 同步通知,点赞之后必须等到该操作执行完所有操作(更新点赞数等业务),才能执行后面的代码;
* 异步通知,点赞之后启动一个新的线程去处理异步通知的业务逻辑,主线程执行后面的代码,互不影响,提升用户体验;
![images](ProgramMonkeyquan/wego/blob/master/images/asynNotice.png)
>如上图所示,异步通知的设计思路如下,分为业务代码、生产者、消费者、消息队列、统一的接口以及实现类,即:业务代码(如点赞业务)首先将点赞的事件封装成一个eventModel对象,然后将其传给生产者,生产者将该事件推到Redis的list的消息队列中,然后消费者监听有哪些实现类实现了统一的接口,并将其保存至Map中,然后开启一个新的线程不断的从消息队列中消费事件,如果有事件则根据事件的类型(点赞/评论/我的关注),去执行对应的实现类。在实现类中的实现是将事件的具体的内容(如用户A点赞了用户B的文章)保存至数据库中,并且设置有一个属性为has_read属性,默认为0(表示有未读消息),然后前端的实现是启用3秒的定时器轮询的调用接口(这个接口的作用是给前端返回有没有未读数据),如果有未读消息,就会给用户提示,当用户查看了提示的内容之后,将所有通知的has_read属性设置为1(表示没有未读消息),这样即实现了异步通知的功能。
#### 1.2 ELK(ElasticSearch+Logstash+Kibana)同步MySQL以及ES搜索和MySQL模糊查询的搜索耗时对比
>项目中考虑到文章的数据量只会越来越大,由于在大数据量的情况下,使用mysql的模糊查询的耗时十分巨大,如果给mysql中添加索引这又会带来新的开销,为此采用ES来搜索文章。首先则需要将MySQL的数据和ES的数据进行同步,采用Lostash工具就可以实现同步数据,kibana的作用是提供一个可视化的界面,方便开发人员搜索数据。同步完成之后,需要只需要集成Spring-data-elasticsearch,根据其api接口就可以实现按照文章标题和文章内容模糊查询,并实现了将关键字高亮展示(高亮展示是由前端来完成的,具体的思路为:前端通过搜索框拿到用户搜索的关键词,然后使用正则表达式匹配后端返回数据中的关键字,匹配之后将其样式改为红色标亮展示)。
![images](ProgramMonkeyquan/wego/blob/master/images/es-mysql.png)
在指导老师的督促下,要拿数据说话为什么在大数量的情况下ES的搜索耗时要低于MySQL的搜索耗时?为此,自己写程序随机生成了100、1000、10000、100000、600000条数据来进行对比,对比结果如上图所示,得出结论:在数据量大于100000的时候,ES的搜索耗时已经优于MySQL了,数据量越大时,差距更加明显。
#### 1.3 点赞在高并发环境下的设计思路
>业务场景:在高并发环境下用户频繁的给某一篇文章点赞,而点赞之后需要将点赞数更新至数据库中,这样就可能严重影响数据库的性能,甚至会导致数据的宕机。<br>
设计思路:将文章的点赞信息全部缓存在redis的set类型的数据结构中,读的时候直接从redis中返回点赞数据,然后使用Quartz每隔两个小时将Redis的数据同步至MySQL中,保证Redis和MySQL的数据一致性。 <br>
#### 1.4 私信实现
>私信的实现主要是基于websocket实现,分为三步:<br>第一步双方建立websocket连接,<br>第二步后端负责�
没有合适的资源?快使用搜索试试~ 我知道了~
【毕业设计】基于SpringBoot和Vue.js框架的校园社区论坛系统_pgj.zip
共185个文件
java:82个
vue:44个
png:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 98 浏览量
2024-12-10
21:48:05
上传
评论
收藏 1.53MB ZIP 举报
温馨提示
【毕业设计】基于SpringBoot和Vue.js框架的校园社区论坛系统_pgj
资源推荐
资源详情
资源评论
收起资源包目录
【毕业设计】基于SpringBoot和Vue.js框架的校园社区论坛系统_pgj.zip (185个子文件)
demo.css 8KB
font.css 2KB
iconfont.css 2KB
iconfont.css 2KB
reset.css 241B
iconfont.eot 2KB
iconfont.eot 2KB
.gitattributes 57B
.gitignore 445B
demo_index.html 8KB
index.html 613B
favicon.ico 4KB
index 1B
JedisService.java 8KB
ArticleController.java 7KB
ArticleDao.java 7KB
ArticleServiceImpl.java 7KB
LoginController.java 6KB
FollowController.java 6KB
UserController.java 5KB
HttpClientUtils.java 4KB
EventConsumer.java 4KB
RegisterController.java 4KB
CommentController.java 4KB
LikeController.java 4KB
GithubOauthController.java 4KB
ChatEndPoint.java 3KB
CommentHandler.java 3KB
LikeHandler.java 2KB
EventModel.java 2KB
FansController.java 2KB
QQOauthController.java 2KB
IndexController.java 2KB
LikeServiceImpl.java 2KB
NoticeController.java 2KB
Article.java 2KB
UserDao.java 2KB
QuartzConfig.java 2KB
FollowHandler.java 2KB
GithubOauthConfig.java 2KB
CommentDao.java 2KB
CodeMsg.java 1KB
QQOauthConfig.java 1KB
CommentServiceImpl.java 1KB
CategoryServiceImpl.java 1KB
NoticeDao.java 1KB
CommonUtils.java 1KB
CategoryDao.java 1KB
FollowDao.java 1KB
RedisConfig.java 1KB
ArticleService.java 1KB
AchieveValueTask.java 1KB
LikeTask.java 1KB
NoticeServiceImpl.java 1KB
FollowServiceImpl.java 1KB
FansDao.java 995B
UserServiceImpl.java 953B
CorsConfiguration.java 872B
EventProducer.java 860B
RandomUtils.java 855B
LeaderBoardController.java 812B
FansServiceImpl.java 799B
GenerateRandomCode.java 756B
LikeService.java 724B
BasePrefix.java 675B
User.java 670B
Result.java 664B
WegoApplication.java 657B
CommentService.java 644B
ArticleUserVo.java 619B
LikeKey.java 565B
FollowService.java 512B
UserTokenKey.java 503B
VerifyCodeKey.java 486B
WebSocketConfig.java 475B
Notice.java 463B
CategoryService.java 462B
FansService.java 401B
FollowKey.java 398B
Comment.java 396B
NoticeService.java 377B
EventType.java 364B
FansKey.java 350B
UserService.java 343B
CommentUserVo.java 314B
MD5Utils.java 293B
Follow.java 287B
ElasticSearchDao.java 283B
Fans.java 283B
Message.java 266B
EventHandler.java 263B
WegoApplicationTests.java 210B
Category.java 179B
CommonKey.java 177B
KeyPrefix.java 161B
publish.jpeg 270KB
index.jpeg 170KB
detail_info.jpeg 136KB
fans.jpeg 92KB
img1.jpg 86KB
共 185 条
- 1
- 2
资源评论
苹果酱0567
- 粉丝: 1833
- 资源: 981
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 東耳篮球馆会员信息管理系统(编号:98721117).zip
- 房屋系统(编号:45266146).zip
- 大学生志愿者信息管理系统(编号:96654262).zip
- 房屋租赁系统(编号:49930163).zip
- 付费自习室管理系统(编号:46724236)(1).zip
- 学术论文撰写技巧:施一公提高英文论文写作能力的六点建议
- 科研真问题从何而来-中科院院士分享
- 通过matlab语言读取csv文件.zip
- 通过Django实现用户注册和登录的简单认证系统.zip
- 通过汇编语言计算两个整数和,将结果存储在另一个变量中.zip
- Aruba%20Instant%20On_2.3.0_apk-dl.com.apk.1.1
- Ruby参考手册中文CHM版最新版本
- RubyonRails字符串处理中文最新版本
- 基于 selenium 模拟微博登录爬虫资料齐全+详细文档+源码.zip
- 基于chromeDriver+selenium蓝桥杯题库爬虫资料齐全+详细文档+源码.zip
- 基于java+selenium爬虫资料齐全+详细文档+源码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功