最近更新:

  • 2021-10-14:增加效果图和代码链接。
  • 2020-11-02:初稿。

需求分析

群聊是很基础的功能需求,在进行群组聊天前,逃不过创建群组的这么一个过程。

接下来,我们对微信进行一个简单的分析,然后设计一套类似于微信操作体验的业务。

主动方:

被动方:

所以,根据上面的图,分析可得:

  1. 创建群组的时候,需要能指定成员列表
  2. 创建成功后,要自动创建会话,并产生一条群提示,广播给其他人,被邀请加入了群聊。

模块交互设计

  1. app发送创建群组请求,附带群组名称(为空时,自动生成群名)和成员列表
  2. 转发
  3. 插入群组
  4. 添加成员
  5. 为每个人创建群聊会话
  6. 插入一条群聊消息,消息类型为tips,内容为"xx邀请你,yy和zz加入群聊",并添加到attach_notificatino_msg字段中,以便gate网关,直接广播系统通知消息给对应的群成员
  7. 返回
  8. 给客户端响应,客户端读取会话ID和加载tips内容“你邀请xx,yy和zz加入了群聊”
  9. 广播群聊消息
  10. 广播群聊消息

协议设计

创建群

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

解散群

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

退群

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

查询群列表

// 查询群列表请求
message CIMGroupListReq {// cmd id:         0x507uint64 user_id = 1;
}// 查询群列表响应
message CIMGroupListRsp {// cmd id:         0x508uint64 user_id = 1;repeated CIMGroupVersionInfo group_version_list = 2;
}// 群版本信息
message CIMGroupVersionInfo {uint64 group_id = 1;uint32 group_version = 2;
}

注意,这里返回的是ID+群版本号,可以方便将来扩展。具体的群信息,还需要查询一次。

群信息

// 查询群信息请求
message CIMGroupInfoReq {// cmd id:         0x509uint64 user_id = 1;repeated CIMGroupVersionInfo group_version_list = 2;
}// 查询群信息响应
message CIMGroupInfoRsp {// cmd id:         0x510uint64 user_id = 1;uint32 result_code = 2;repeated CIMGroupInfo group_info_list = 3;
}

拉人

// 邀请人入群请求
message CIMGroupInviteMemberReq {// cmd id:         0x511uint64 user_id = 1;uint64 group_id = 2;repeated uint64 member_id_list = 3; // 成员ID列表
}// 邀请人入群响应
message CIMGroupInviteMemberRsp {// cmd id:         0x512uint64 user_id = 1;uint64 group_id = 2;uint32 result_code = 3;bytes attach_notificatino_msg = 10; // 入群系统通知,需要广播
}

为了简化,这里没有验证机制,而是直接把对方加入到群内。

踢人

// 踢人请求
message CIMGroupKickOutMemberReq {// cmd id:        0x513uint64 user_id = 1;uint64 group_id = 2;repeated uint64 member_id_list = 3; // 成员ID列表
}// 踢人响应
message CIMGroupKickOutMemberRsp {// cmd id:        0x514uint64 user_id = 1;uint64 group_id = 2;uint32 result_code = 3;bytes attach_notificatino_msg = 10; // 踢人系统通知,需要广播
}

效果

创建群



代码

请移步:

  • Server

CoffeeChat:
https://github.com/xmcy0011/CoffeeChat
opensource im with server(go) and client(flutter+swift)

  • iOS:https://github.com/xmcy0011/CoffeeChat/client/ios

参考了TeamTalk、瓜子IM等知名项目,包含服务端(go)和客户端(swift),单聊、群聊和机器人(小微、图灵、思知)聊天功能已完成,欢迎对golang和跨平台开发flutter技术感兴趣的小伙伴Star加关注。

IM开发——群组创建业务设计相关推荐

  1. Telegram 群组创建机器人bot

    文章目录 创建机器人 获取群组chatId 发送消息 Telegram是一款跨平台的即时通讯软件,用户可以相互交换加密与自毁消息,发送照片.影片等所有类型文件. 创建机器人 Telegram软件中直接 ...

  2. Thinkphp5 开发 OA 办公系统 - 数据库设计

    2019独角兽企业重金招聘Python工程师标准>>> 自从接触到用PowerDesigner做数据库建模后,喜欢它就停不下来了.我发现现在很多2-20人的团队在做数据库结构设计时, ...

  3. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  4. Mysql使用大全(MySQL架构与存储引擎 、事务 、业务设计 、索引 、数据结构 、执行计划 、数值类型)

    这是一篇mysql大全,学习完这篇文章,相信在日常业务和面试完全不在问题,下面我们来一一介绍 MySQL架构与存储引擎 全局变量和会话变量 要想显式指定是否设置全局或会话变量,使用GLOBAL或SES ...

  5. 开发人员如何了解业务

    业务就是行业的运转逻辑.流程与现状,是结果表象,是能够被看见和感受的:业务也是内在本质,是能够被洞察和感知的.业务就是这个行业怎么发展起来的.现状如何.未来趋势如何.运用什么技术.有哪些企业.商业模式 ...

  6. .NET 分布式架构开发实战之二 草稿设计

    前言: 本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1) 第一个数据层草图的提出 2) 对数据访问层的思考 3) 第二个数据层草图的提出 1.数据层 ...

  7. Android开发群

    为什么80%的码农都做不了架构师?>>>    我的自建Android应用开发群,欢迎大家来聊聊呀!201427584 转载于:https://my.oschina.net/cati ...

  8. 嵌入式软件开发工程师谈软件架构的设计

    嵌入式软件开发工程师谈软件架构的设计 注:此处嵌入式特指基于linux平台,单片机和其他rtos不在讨论范围 笔者从事嵌入式软件开发有6,7个年头,bsp,驱动,应用软件,android hall,f ...

  9. 需求与业务的区别、需求设计与业务设计的区别

    "业务和需求",这两个词软件工程师们每天都会用到几次,但却不一定很清楚两者的区别:"业务"指的是软件客户现在从事的工作,"需求"指的是客户对 ...

最新文章

  1. Git 高级用法小抄
  2. centos快速安装npm-2.15.8
  3. java高并发(十六)J.U.C之ForkJoin
  4. 安装 groovy eclipse 插件
  5. ROS在类中发布和接受消息(标准消息)
  6. vue全家桶搭建前端页面注意细节及遇到的难题
  7. QThread线程详细用法
  8. 最简单AS5048a模块鉴别和读取数据
  9. 从零开始成为优秀的交互设计师
  10. 如何看待自己正在遭受的挫折?
  11. 使用Spreadsheet Compare工具对比Excel文件差异
  12. pc展示emoji表情_如何在智能手机或PC上使用表情符号
  13. 【潇湘菌子】Centos下YAPI安装
  14. QAD的“炫富挑战”Accepted
  15. 孕妇能长期在计算机屏幕前工作吗,怀孕期的孕妈妈们每天在电脑前呆多久?
  16. 高新技术企业领域有哪些?国家高新技术企业?
  17. 怎样成为解决问题的高手?——关于问题解决的关键4步骤
  18. 原创 | 一文读懂泊松分布,指数分布和伽马分布
  19. 【英语】大学英语CET考试,阅读部分2(长篇阅读,选词填空,综合演练)
  20. vue集成Highcharts 云词图

热门文章

  1. 日常任务-07-技术-15.SVN使用-如何将项目加入svn版本控制并且配置人员权限
  2. Verilog HDL 实验题
  3. 模拟电路笔记(二)晶体三极管及放大电路
  4. 1个人+3万元+每天5小时一年赚30万现金……你干不干?
  5. 如何发布一款Android应用到安卓市场
  6. IT十年人生过客-十五-回京
  7. 判断是否qq或者微信内置浏览器
  8. 【2019-09-04】恐惧就是进化的暗示
  9. 适用于中小企业服务器租用托管
  10. 07.第八章、质量管理