Design empresarial de criação de grupo de desenvolvimento de mensagens instantâneas

análise de demanda

O chat em grupo é um requisito funcional muito básico. Antes de um chat em grupo, você não pode escapar do processo de criação de um grupo.

Em seguida, conduzimos uma análise simples do WeChat e, em seguida, projetamos um conjunto de serviços semelhante à experiência operacional do WeChat.

Parte ativa:
Insira a descrição da imagem aqui

Parte passiva:
Insira a descrição da imagem aqui
Portanto, de acordo com o diagrama acima, a análise pode obter:

  1. Ao criar um grupo, você precisa ser capaz de especificar uma lista de membros
  2. Depois que a criação for bem-sucedida, uma sessão será criada automaticamente e um prompt de grupo será gerado, transmitido para outras pessoas e convidado a entrar no chat em grupo.

Design de interação do módulo

Insira a descrição da imagem aqui

  1. O aplicativo envia uma solicitação para criar um grupo, com o nome do grupo (quando está vazio, o nome do grupo é gerado automaticamente) e uma lista de membros
  2. Avançar
  3. Inserir grupo
  4. Adicionar membro
  5. Crie sessões de chat em grupo para todos
  6. Insira uma mensagem de bate-papo em grupo, o tipo de mensagem é dicas, o conteúdo é "xx convida você, yy e zz para entrar no bate-papo em grupo" e adicione-o ao campo attach_notificatino_msg, para que o gateway possa transmitir diretamente mensagens de notificação do sistema para os membros do grupo correspondente
  7. Retorna
  8. Responda ao cliente, o cliente lê o ID da sessão e carrega o conteúdo das dicas "Você convidou xx, yy e zz para participar do chat em grupo"
  9. Transmitir mensagens de bate-papo em grupo
  10. Transmitir mensagens de bate-papo em grupo

Projeto de protocolo

Crie um grupo

// 创建讨论组群请求(类似微信):
// 1.无需对方同意
// 2.群成员可邀请任何人进群
// 3.创建人默认为群主,群主可转让,群主退出默认随机一个成员自动成为群主
// 4.只有群主可修改群公告,踢人
message CIMGroupCreateReq {
  // cmd id: 		0x501
  uint64 user_id = 1;
  string group_name = 2;              // 群名,不指定则由服务端生成
  repeated uint64 member_id_list = 3; // 群成员列表
}

// 群组创建响应
message CIMGroupCreateRsp {
  // cmd id: 		0x502
  uint64 user_id = 1;
  uint32 result_code = 2;
  CIMGroupInfo group_info = 3;        // 群信息
  repeated uint64 member_id_list = 4; // 群成员列表
  bytes attach_notificatino_msg = 10; // 群创建系统通知,需要广播
}

// 群组类型
enum CIMGroupType {
  kCIM_GROUP_TYPE_UNKNOWN = 0;
  kCIM_GROUP_TYPE_GROUP_NORMAL = 1; // 普通群(200人)
  kCIM_GROUP_TYPE_GROUP_SUPER = 2;  // 超级群(2000人)
}

// 加群模式
enum CIMGroupJoinModel {
  kCIM_GROUP_JOIN_MODEL_DEFAULT = 0;   // 所有人可邀请别人加入
  kCIM_GROUP_JOIN_MODEL_NEED_AUTH = 1; // 需要管理员验证
  kCIM_GROUP_JOIN_MODEL_REJECT = 2;    // 拒绝所有人
}

// 被邀请人同意方式
enum CIMGroupBeInviteMode {
  kCIM_GROUP_BE_INVITE_MODEL_DEFAULT = 0;    // 不需要同意
  kCIM_GROUP_BE_INVITE_MODEL_NEED_AGREE = 1; // 需要同意
}

// 禁言方式
enum CIMGroupMuteModel {
  kCIM_GROUP_MUTE_MODEL_DEFAULT = 0; // 不禁言
  kCIM_GROUP_MUTE_MODEL_ALL = 1;     // 全体禁言
}

// 群组信息
message CIMGroupInfo {
  uint64 group_id = 1;                      // 群组ID
  string group_name = 2;                    // 群组名称(最大128字符)
  CIMGroupType group_type = 3;              // 群类型
  CIMGroupJoinModel join_model = 4;         // 入群模式
  CIMGroupBeInviteMode be_invite_model = 5; // 被邀请人同意方式
  CIMGroupMuteModel mute_model = 6;         // 禁言模式
  uint64 group_owner_id = 7;                // 群主
  uint32 create_time = 8;                   // 创建时间
  uint32 update_time = 9;                   // 群信息更新时间
  string group_intro = 10;  // 群介绍,别人搜索入群的时候显示
  string announcement = 11; // 群公告
  string group_avatar = 12; // 群头像
}

Dissolver o grupo

// 解散群请求
message CIMGroupDisbandingReq {
  // cmd id: 		0x503
  uint64 user_id = 1;
  uint64 group_id = 2;
}

message CIMGroupDisbandingRsp {
  // cmd id: 		0x504
  uint64 user_id = 1;
  uint64 group_id = 2;
  uint32 result_code = 3;
  bytes attach_notificatino_msg = 10; // 群解散系统通知,需要广播
}

Cair fora

// 退出群
message CIMGroupExitReq {
  // cmd id: 		0x505
  uint64 user_id = 1;
  uint64 group_id = 2;
}

// 退出群
message CIMGroupExitRsp {
  // cmd id: 		0x506
  uint64 user_id = 1;
  uint64 group_id = 2;
  uint32 result_code = 3;
  bytes attach_notificatino_msg = 10; // 群成员退出群系统通知,需要广播
}

Lista de grupo de consulta

// 查询群列表请求
message CIMGroupListReq {
  // cmd id: 		0x507
  uint64 user_id = 1;
}

// 查询群列表响应
message CIMGroupListRsp {
  // cmd id: 		0x508
  uint64 user_id = 1;
  repeated CIMGroupVersionInfo group_version_list = 2;
}

// 群版本信息
message CIMGroupVersionInfo {
  uint64 group_id = 1;
  uint32 group_version = 2;
}

Observe que o número da versão do grupo ID + é retornado aqui, o que pode facilitar a expansão futura. As informações específicas do grupo precisam ser consultadas uma vez.

Informação do grupo

// 查询群信息请求
message CIMGroupInfoReq {
  // cmd id: 		0x509
  uint64 user_id = 1;
  repeated CIMGroupVersionInfo group_version_list = 2;
}

// 查询群信息响应
message CIMGroupInfoRsp {
  // cmd id: 		0x510
  uint64 user_id = 1;
  uint32 result_code = 2;
  repeated CIMGroupInfo group_info_list = 3;
}

Puxar pessoas

// 邀请人入群请求
message CIMGroupInviteMemberReq {
  // cmd id: 		0x511
  uint64 user_id = 1;
  uint64 group_id = 2;
  repeated uint64 member_id_list = 3; // 成员ID列表
}

// 邀请人入群响应
message CIMGroupInviteMemberRsp {
  // cmd id: 		0x512
  uint64 user_id = 1;
  uint64 group_id = 2;
  uint32 result_code = 3;
  bytes attach_notificatino_msg = 10; // 入群系统通知,需要广播
}

Para simplificar, não há mecanismo de verificação aqui, mas a outra parte é adicionada diretamente ao grupo.

Chute as pessoas

// 踢人请求
message CIMGroupKickOutMemberReq {
  // cmd id: 		0x513
  uint64 user_id = 1;
  uint64 group_id = 2;
  repeated uint64 member_id_list = 3; // 成员ID列表
}

// 踢人响应
message CIMGroupKickOutMemberRsp {
  // cmd id: 		0x514
  uint64 user_id = 1;
  uint64 group_id = 2;
  uint32 result_code = 3;
  bytes attach_notificatino_msg = 10; // 踢人系统通知,需要广播
}

efeito

A ser atualizado após a implementação.

Sobre o autor

Recomende seu próprio IM de código aberto, escrito em Golang puro:

CoffeeChat :
https://github.com/xmcy0011/CoffeeChat
código aberto im com servidor (go) e cliente (flutter + swift)

Referido a projetos bem conhecidos, como TeamTalk e Guazi IM, incluindo servidor (go) e cliente (flutter + swift), funções de bate-papo único e robô (micro, Turing, Sizhi) foram concluídas e funções de bate-papo em grupo estão sendo atualmente desenvolvido, Bem-vindo amigos Star que estão interessados ​​em golang e desenvolvimento de plataforma cruzada de tecnologia de vibração para prestar mais atenção.

—————————————————
Declaração de direitos autorais: este artigo é o artigo original do blogueiro CSDN "Xu Fei" e segue o contrato de direitos autorais CC 4.0 BY-SA. Anexe a fonte original link e isso para reimpressão.
Link original: https://blog.csdn.net/xmcy001122/article/details/109451167

Acho que você gosta

Origin blog.csdn.net/xmcy001122/article/details/109451167
Recomendado
Clasificación