Skip to content

Commit a28b3b9

Browse files
im system study
1 parent b597638 commit a28b3b9

4 files changed

Lines changed: 163 additions & 1 deletion

File tree

.DS_Store

2 KB
Binary file not shown.
6 KB
Binary file not shown.

GoLang/go项目/go-im/GoLang 百万级并发IM系统一.md

Lines changed: 163 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ if err != nil {
149149
vip.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

LeetCode刷题/.DS_Store

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)