/douyin_simple

Primary LanguageGoGNU Affero General Public License v3.0AGPL-3.0

simple-demo

项目简介&前言

  • 由于本学期作业和项目较多,因此本团队到了最后一星期才开始项目的制作,同时因为两名队员突然选择放弃项目,因此队员也大为减少
    • 具体安排:前两天讨论 + 后续五天开始做项目(队员到倒数第四天经过队长培训后开始项目的制作)
  • 此次项目已经实现了全部的接口,但是没有时间去应用字节青训营课程所教授的内容来进行进一步的优化和完善
  • 后续本团队会积极吸收此次的项目经验,接着将项目优化下去 团队内的许多人其实都挺喜欢此次的抖音项目,因为与课上和在学校内学习的千篇一律的项目不同,此次能够真正的让专注于学习后端的我们积极应用后端的知识,而且我们始终把这一次项目看作是一次宝贵的学习经验 在做抖音项目的过程中其实是很快乐的,因为我们团队很多队员也有刷抖音。当我们看着自己所敲的代码能够真正的在客户端跑起来展现出效果的时候,会感觉到做这个项目是很快乐的

后续的优化计划

  1. 实现redis缓存,加快视频等读取速度和用户访问的速度
  2. 后续使用对象存储来完成对视频和图片的存储,而不是依靠存储在本地的服务器并在数据库内存储存放视频和图片的url的地址
  3. 使用Docker整合依赖服务,便于用户使用项目时能够快速部署
  4. 使用较好的密码加密算法保证用户信息的安全
  5. 使用并发编程技术,改变单机框架,后续会使用分布式框架提高响应速度和信息处理能力,同时会在使用分布式框架的同时做好相应的锁机制,确保 ACID 原则

技术栈

  • gin 框架
  • gorm 框架
  • MVC 模式
  • ffmpeg
  • JWT 中间件
  • yaml文件读取
  • MySQL

目录结构说明

  • main.go:文件的主方法,负责启动服务
  • router.go:路由器,负责接收客户端发送的请求地址并转发到指定的接口进行处理
  • Config 包:负责配置文件和具体读取配置
  • Controller 层:负责具体接受请求,并获取相应的数据传递给 Service 层,并从 Service 层获取到处理后的数据,通过判断方法返回值进行不同的响应,并将响应返回给客户端
  • Service 层:负责接受 Controller 层传递的数据,并进行相应处理后返回给 Controller 层
  • Dao 层:负责接收 Service 处理后的数据,然后调用相应的方法进行数据库连接查询,同时使用了数据库连接池保证
  • Data 包:负责存放用户的视频和封面图片,后续优化会使用 Tos 对象存储
  • Global 包:负责管理全局变量
  • Initialize 包:负责配置初始化和数据库初始化
  • Type 包:负责存放结构体,统一后续调用,类似于 Java 中的实体类
  • douyin.sql :数据库脚本文件,用于建立数据库
  • Jwt 包:负责生成 token 和解析 token 成用户 id
  • Model 包:负责统一管理 gorm 所需要的结构体
D:.
│  .gitattributes
│  .gitignore
│  go.mod
│  go.sum
│  main.go
│  README.md
│  douyin.sql
│  router.go
│
├─config
│      config.go
│      config.yaml
│
├─controller
│      comment.go
│      favorite.go
│      feed.go
│      publish.go
│      relation.go
│      user.go
│
├─Dao
│      CommentDao.go
│      FavouriteDao.go
│      UserDao.go
│      VideoDao.go
│
├─Data
│  ├─photo
│  └─video
├─global
│      global.go
│
├─initialize
│      initConfig.go
│      initMysql.go
├─jwt
│      jwt.go
│
├─model
│      model.go
│
└─type
        common.go

项目中遇到的问题

  1. 评论列表评论完后会出现输入框无法收回的问题,必须退出应用,检查后觉得应该不是后端的问题
  2. 视频流无法实现实时刷新,必须手动刷新
  3. 用户信息界面的发布数量和喜欢数量无法正确显示,但是具体详情页面可以
  4. 粉丝节目不知道为什么会出现有取消关注按钮
  5. 在首页点击其他用户无法正确展示他们的发布视频和喜欢的视频,前端疑似没有传递接口