@@ -149,7 +149,7 @@ if err != nil {
149149vip.GetString("db.mysql.USER_NAME") // your USER_NAME
150150```
151151
152- 但是这种方式不够优雅,所以我们需要封装一个接口体来存储解析好的配置文件
152+ 但是这种方式不够优雅,所以我们需要封装一个结构体来存储解析好的配置文件
153153
154154在` utils ` 目录下新建` systemInit.go ` 文件
155155
@@ -1103,6 +1103,8 @@ func Update(c *gin.Context) {
11031103
11041104### 3.2 基础功能
11051105
1106+ 在开发之前我们需要先将` IM ` 系统中的一些概念理清楚
1107+
11061108#### 3.2.1 登陆功能
11071109
11081110这里我们需要考虑到项目之后的可拓展性,我们刚开始设计肯定是只支持` 账号密码 ` ,但是随着业务的发展,我们肯定需要拓展更多的登录方式,例如:
@@ -1272,19 +1274,179 @@ func Login(c *gin.Context) {
12721274
12731275这里发送消息我们采用的是` webScoket ` 协议,并且为了解耦我们引入了消息队列(使用redis里的发布订阅` pub/sub ` )
12741276
1277+ - 单播:直接走websocket协议
1278+ - 多播(广播)、组播:采用客户端订阅消息队列的方式
1279+
1280+ ![ image-20230209181944722] ( https://cdn.fengxianhub.top/resources-master/image-20230209181944722.png )
1281+
1282+ ** 基础消息模版**
1283+
1284+ ``` go
1285+ // Message 群聊消息模板
1286+ type Message struct {
1287+ Id int64 // 消息Id
1288+ GroupId int64 // 消息所属群组id
1289+ UserId int64 // 消息所属用户id
1290+ MessageData string // 消息主体
1291+ MessageType string // 消息类型,文字、语音、表情包图片等
1292+ CreateTime string // 消息创建时间
1293+ UpdateTime string // 消息更新时间
1294+ Status int64 // 消息状态
1295+ }
1296+ ```
1297+
1298+
1299+
1300+ ## 附录一 IM基础概念
1301+
1302+ ### 用户(User)
1303+
1304+ - 用户,就是使用IM 系统的一个人的代表。是通讯的一方。
1305+ - 在业务系统,对接IM 平台时,对需要登录IM 系统的用户,必须对应创建一个IM 用户。
1306+
1307+ 用户的主要属性有:
1308+
1309+ - user_id:唯一标识一个用户
1310+ - user_number:用户的外显ID,给用户展示使用,有靓号控制和排除不合理ID等需求
1311+ - username:用户昵称,需要支持特殊编码格式的字符,例如emoji字符
1312+ - password:密码
1313+ - 昵称:在会话,好友,消息等展示时,用于文本显示。
1314+ - 头像:在会话,好友,消息等展示时,用于图片显示。
1315+ - 其他属性
1316+
1317+ ### 群(Group)
1318+
1319+ - 群,是一个允许多人聊天的一个关系。
1320+ - 用户在群里发送消息,所有群成员都能够收到。
1321+
1322+ 群的主要属性有:
1323+
1324+ - group_id:群的唯一标识
1325+ - 名称:在会话,群展示时,用于文本显示。
1326+ - 头像:在会话,群展示时,用于图片显示。
1327+ - owner:群主。一个群只有一个群主,一般是群的创建者,有的可以转移。群的最高权限管理员。
1328+ - admin:管理员。一个群可以有多个管理员。管理员可以做一些群的管理功能。比如:接收进群申请,禁言用户等。不同的系统有不同的权限定义。
1329+ - member:普通群成员。一个群有多个普通群成员。
1330+ - 其他属性
1331+
1332+ ### 聊天室(ChatRoom)
1333+
1334+ 聊天室,是一个特殊的群,与普通群的差别一般有:
1335+
1336+ - 群成员在离线一段时间后,会主动退出聊天室。(个人认为,是核心区别)。
1337+ - 离线消息的数量,会比普通群少。
1338+ - 历史消息的数量与时间:会比普通群偏短,偏少。
1339+
1340+ ### 好友(Friend)
1341+
1342+ - 有的又称联系人。
1343+ - 好友是两个用户之间的关系。
1344+ - 一般在普通聊天类的应用,需要成为还有关系,才能互相发送消息。
1345+
1346+ 好友的一般属性(普通用户属性之外):
1347+
1348+ - 备注
1349+ - 分组
1350+ - 等
1351+
1352+ ### 会话(Conversation)
1353+
1354+ 会话可以看做是一个临时的关系。
1355+
1356+ - 用户会话:用户与用户之间的会话。
1357+ - 群会话:用户与群/聊天室之间的会话。
1358+ - 会话是分方向的:用户A与用户B形成的会话,实际是两个会话。一个是用户A的会话,目标是用户B;另一个是用户B的会话,目标是用户A。两者对会话的操作互不影响。
1359+
1360+ 会话一般的属性有(除了群,或者用户信息外):
1361+
1362+ - 最后一条消息:
1363+ - 未读消息数:
1364+ - 免打扰(不显示未读计数,不推送)
1365+ - 置顶
1366+ - 等
1367+
1368+ ### 消息(Message)
1369+
1370+ 消息是一个用户,与另一个用户/群的通信内容的载体。
1371+
1372+ 消息的主要属性:
1373+
1374+ - from:发送用户(user_id)
1375+ - to:接收者(用户,群)
1376+ - 消息类型:文本,图片,语音,视频等
1377+ - 消息内容:对于图片,语音,视频,文件等大多以文件的url 来代替。
1378+ - 时间:
1379+ - 状态:发送方(发送中,发送成功,发送失败),接收方(已读,未读)。
1380+
1381+ ### 未读消息/未读计数
1382+
1383+ - 用户收到消息,未查看的消息。
1384+ - 在会话上/角标处会显示未读计数,标识当前未读消息的计数。
1385+ - 在用户点进去一个会话,会将该会话的未读计数清零。
1386+
1387+ ## 附录二 IM基础功能
1388+
1389+ ### 好友
1390+
1391+ 好友
1392+
1393+ - 好友申请
1394+ - 拒绝申请
1395+ - 同意申请
1396+ - 删除好友
1397+
1398+ 黑名单
1399+
1400+ - 添加黑名单
1401+ - 删除黑名单
1402+
1403+ ### 群
1404+
1405+ - 申请进群(如果设置了需要申请,否则可以直接进群)
1406+ - 同意进群申请
1407+ - 拒绝进群申请
1408+ - 退出群
1409+ - 修改群信息:名称,头像,公告等。
1410+ - 邀请进群
1411+ - 踢出用户(需要管理员)
1412+ - 禁言/取消禁言
1413+
1414+ ### 消息
12751415
1416+ - 发送消息
1417+ - 删除消息:删除本地消息,只对自己(单设备)有效。其他人,甚至自己的其他设备如果已经接收了该消息,都还能看到这个消息。
1418+ - 撤回消息:只有消息发送者,或者群管理员可以撤回消息。撤回消息后,其他用户都看不到这个消息。一般有时间限制。
12761419
1420+ ### 会话
12771421
1422+ #### 会话创建
12781423
1424+ - 发消息,自动创建会话
12791425
1426+ #### 会话删除
12801427
1428+ - 会话删除一般是客户端本端的行为。
1429+ - 会话删除,可以视为会话本身的一个软删除,不会删除对应的好友,群。
1430+ - 会话删除,不影响会话中的消息。(微信应该是删除本地消息)。
12811431
1432+ ### 离线消息/历史消息
12821433
1434+ #### 离线消息
12831435
1436+ - 当接收消息的用户不在线时,消息会进入离线消息缓存。
1437+ - 当用户上线,会同步离线消息到本地。
1438+ - 离线消息有存储时间限制
1439+ - 离线消息有存储数量限制
12841440
1441+ #### 历史消息
12851442
1443+ - 用户接收消息后,消息并不会立即从服务端删除。还会在服务端继续保存一段时间,称为历史消息。
1444+ - 一般可以按会话获取历史消息。
12861445
1446+ ### 推送
12871447
1448+ - 推送,实际上不是IM。是一套独立的系统。
1449+ - IM 会使用推送,来提高消息的及时触达性
12881450
12891451
12901452
0 commit comments