这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
课程链接
sudo apt 使用的什么协议下载
/etc/apt是sudo apt配置文件夹。sudo apt配置http等协议或者设置使用IPv4等协议在该文件夹的apt.conf.d文件夹;sudo apt的下载软件库的站点在sources.list文件中,从那个文件默认的软件库我们可以看到使用的是http协议,也就是说sudo apt默认下载库时使用的http协议。
Vmware网络连接的三种方式
- 桥接模式:虚拟机占用一个ip地址,虚拟机独立访问外部网络,外部网络可以访问虚拟机
- NAT模式:虚拟机和主机公用IP地址,虚拟机把请求打包发送给主机(通过NAT适配器协调),以主机名义发送请求,返回后解析请求发回虚拟机
- 仅主机模式:无法访问外部网络。
curl和ping
stackoverflow.com/questions/5…
ping使用的ICMP协议,这是传输层协议;curl可以支持多种应用层协议,如http\https\ftp等。
上传图片到有道云分享
上传到有道云,点击分享,点开分享链接,再分享链接中复制图片地址,把这个图片地址放到Markdown
跑通simpole-demo
-
本次实验使用平台:Window上安装Vmware,Vmware上装Ubuntu20.04虚拟机,Goland IDE,天天模拟器
-
实验步骤
-
下载simple-demo项目
git clone github.com/RaymondCode…
-
打开并运行simple-demo程序
如图:运行程序命令是
go build && ./simple-demo测试后台:在浏览器输入
http://192.168.186.128:8080/douyin/user/?token=zhangleidouyin其中,IP地址192.168.186.128要替换成自己电脑的,使用ifconfig可以看到自己的IPv4地址
可以看到浏览器结果是
-
打开天天模拟器并安装抖音安装包
-
打开抖音并且双击"我"
-
在跳转的界面输入URL
在之前我们测试时使用的URL是
http://192.168.186.128:8080,这里我们输入的URL就是这个 -
保存之后我们就可以看到正常工作的抖音app了
-
RPC框架
远程过程调用(Remote Procedure Call),用于解决分布式系统中服务之间的调用问题。 通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。 所以,RPC的作用主要体现在这两个方面:
- 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;
- 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。
简单来说,RPC框架让开发者可以像调用本地方法一样调用远程函数。
RPC框架解决了三个基本问题(当然还有其他问题,比如网络安全和流量控制等):
- 函数ID到函数指针的映射。网络中每个函数都有一个ID,可以使用哈希表将函数ID和函数指针映射。客户端和服务端都需要维护一个映射表,客户端调用远程过程的时候要将函数指针映射到函数ID,服务端要将函数ID映射到服务端的函数指针
- 序列化和反序列化。本地方法调用的时候我们的参数可以压栈传递,但是远程过程传递参数要通过网络,网络上只能传递字节流,需要我们在客户端将数据序列化成字节流,在服务端反序列化成我们需要的格式。可以使用Protobuf或者FlatBuffers进行序列化和反序列化
- 网络传输。在网络中传递字节流数据。可以自己写Socket,也可以用asio、ZeroMQ‘、Netty等
RPC框架工作流程:
- 客户端通过映射表将函数指针映射到函数ID,将函数ID和参数序列化成字节流,通过网络发送给服务端
- 服务端接收到客户端请求,将参数和函数ID反序列化成自己需要的数据,然后映射到需要的函数,之后调用这个函数,将结果返回给客户端。
- 客户端接受到服务端返回结构,反序列化成自己需要的数据。
抖音项目
基本功能
用户管理
用户注册
初始化创建用户信息表,表的字段有
id, name, follow_count, follower_count, is_follow
用户注册会在用户信息表中创建一 条记录
id(自增),name,pass, follow_count=0, follower_count=0, is_follow=false
follow_count
用户注册同时会创建对应的token放到内存中,使用集合来存储这个token
创建一个携程管理这个token,使用哈希表存储这个token,{token:timespan},管理token的携程阻塞一定时间长,每到一个时间长就将token的timespan减少1,之后检测这个token的timespan是否为0,如果是0,那么就删除这个token,表示用户失效
用户登录
用户登录会从数据库检索密码,如果不对会返回错误信息,正确会创建相应的token并且返回正确信息
用户信息
查询用户信息表,返回用户信息,包括
id,name,follow_count, follower_count, is_follow
视频流管理
发布视频
查看token是否存在,否则返回错误"User not exist"
获取视频流保存到public文件目录
将视频信息保存到数据库video
数据库video有一个user对象,这个时候我们要缓存user对象,我们可以吧user对象保存到token里面,所以有两个数据(生命周期和user对象)
发布视频列表
video数据库保存数据
视频id,user_id,url,favoritecount,comment_count,is_favorite,title,根据title获取视频流
视频id,uid, title, favorite count, comment count
最新30个视频流
从数据库最大往前数30个视频发送回去
扩展功能I-点赞和评论
点赞功能
用户对视频点赞,保存视频id和用户id的 映射,(uid, vid, action) (action=0表示没有关注,action=1表示已经关注)
查看点赞视频
从视频和用户映射表中获得用户的点赞列表
查询mysql的sql语句是
select * from favorite where userid=uid and action=1
评论功能
扩展功能II-用户关注列表
用户粉丝和关注数据表设计
在线短视频
Python建立http服务器访问本地资源(MP4等)
Vmware虚拟机无法在局域网内部访问
将Vmware虚拟机连接方式变成桥接而不是NAT连接,重启就能在局域网访问虚拟机端口
荣耀平板和手机运行抖音发布视频网络错误
鸿蒙系统的问题,换成雷神模拟器运行抖音就行了
GORM链接MySQL数据库教程
根据.sql文件建立数据库
查看MySQL端口号
关系操作
关注
数据库存储
user1, user2, operation(0不关注,1user1关注user2,2user2关注user1, 3相互关注)
如果不存在user1,user2对,就创建一个user1,user2,1
如果存在user1,user2,(1或3),就报错已经关注
如果存在user1,user2,2,就让2变成3
如果存在user2,user1(2或3),就报错已经关注
如果存在user2,user1(1),就让1变成3
发生关注的时候还要更新user数据表的两个用户的follower和following字段
关注:
如果
取关
如果是user1,user2,0,报错他们没有关注
如果是user1,user2(1或3),就让(1或3)减上1
如果是user2,user1,(2或3),就让(2或3)减上2
获取用户关注列表
如果用户是user1
查询user1,user2,(1或3)或者user2,user1,(2或3)
获取用户粉丝列表
如果用户是user1
查询user1,user2,(2或3)或者user2,user1,(1,或3)
\