这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天。 其实过年这几天都没怎么好好学习,但是这几天也断断续续的看了一些B站上的视频课程。因为我们小组给我分配的项目部分是极简版抖音的社交部分,主要是关系列表和消息功能。所以我也看了看这些地方。
关系列表
这个功能我想的比较简单,因为关注和粉丝是多对多的关系,所以我感觉这里整一个表关联着这两种关系就ok了(建一个表,如果一个人关注另一个人的话,就在表里增加记录,用来记录两人之间的关注和粉丝关系)。细说的话如果是查看关注数就查询他所有的关注人;然后查看粉丝列表的话就查询他所有的粉丝。
消息功能
说实话这个功能个人感觉还是比较困难的,也是今天文章的主要内容。因为项目的介绍里面写了两个方案(一个是使用socket的消息中心,另一个是使用轮询)。因为轮询的方式比较消耗计算机资源,这里就主要介绍一下socket消息中心(以websocket为例)
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。——百度百科
HTTP协议是非持久化的,单向的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。但是会导致过多不必要的请求,浪费流量和服务器资源,每一次请求、应答,都浪费了一定流量在相同的头部信息上。 这里有WebSocket介绍和Socket的区别
然后 gin 中并没有原生的 websocket 的库,所以我就用了 github.com/gorilla/websocket 这个常用的库。主要就是分为服务端和客户端。一对一通信的原理就是,客户端通过一个携带信息的get/post请求去请求服务端,http请求在客户端被升级成wbsocket请求,然后服务端监听者消息的读写,通过请求中携带的消息,把消息发送给对应的客户端。这样就完成了一对一通信,当然,因为个人能力有限,所以介绍的有些模糊,这里就需要大家看看其它博客去理解了。
好了,下次再见吧。