融云「聊天室属性」: 语聊房、直播间有序运行和丝滑体验的绝技

融云「聊天室属性」: 语聊房、直播间有序运行和丝滑体验的绝技

信息技术的发展一日千里,但当技术照进现实,转变为让娱乐、生活更丰富,让工作更方便的实用能力,这个过程并非一日之功,也不是一成不变。

比如,IM 即时通讯中聊天室产品的聊天室属性,表面“其貌不扬”,内里则在多番场景实践下演变得“别有洞天”。

聊天室是直播、语聊房等社交泛娱乐产品必备的组件,它最显著的形态,就是我们常说的“公屏”——用户关系临时、消息内容短小重复的公共聊天频道。

殊不知,借助聊天室属性,它的作用远不止于此。这个功能的优劣,甚至直接影响语聊房和直播间的秩序和体验。

在指定聊天室中设置相关属性,用户进入聊天室后可以同步获取聊天室内的属性信息。

比如,语聊房中的主播麦位信息、角色管理等,狼人杀、剧本杀等游戏房场景中记录用户的角色和牌局状态等。

这是融云首创的产品功能,源于一位语聊房开发者对“抢麦”功能的实现需求。经过充分分析验证,这个需求在融云 IM 产品强大的外延能力下得以实现,进而沉淀为通用能力提供给更多开发者。

以此为界,聊天室产品的比拼有了新维度,在承接海量用户的并发能力之外,有了更具生命力、更加鲜活的功能表现,并逐渐构建了自己的迭代循环:功能领先→众多开发者集成→新的场景需求→研发新功能→功能持续领先。

随着人们的线上社交娱乐热情被点燃,聊天室的应用场景遍地开花,融云聊天室属性功能也不断在开发者的需求下丰富起来。

场景丰富

语聊房、直播中的聊天室属性

语聊房

一个语聊房可能有海量用户同时在线,任何一个人的麦位信息、角色身份等变化都需要在极短时间内同步给房间内所有人。

麦位管理:上麦即拥有了发言能力,下麦则从发言用户变成普通用户,锁麦即可锁定麦位拒绝用户上麦,抢麦则为几个用户同时抢占一个麦位。同时,还有禁言、发言等麦位状态管理。

用户管理:主播、麦上观众、房间观众等用户角色设置;狼人杀、剧本杀等游戏房中警、匪、平民等角色设置。

房间管理:房间人数、麦位数量、房间公告等。

PK 状态:语聊房跨房间 PK 中的双方支持人数战绩展示。

防炸麦:可通过聊天室属性设置在用户离线后及时清除连接状态,避免“幽灵麦”等情况的发生;通过聊天室属性的房间状态回调接口,开发者还可以实时感知用户的上下麦状态,如出现非法用户上麦的情况,可及时将其踢出房间,维护语聊房的正常秩序和良好体验。

直播

房间信息:房间人数、观众信息、房间公告。

角色管理:主播、管理员等角色信息和权限。

榜单信息:多维度观众榜单、最受欢迎礼物榜单等榜单信息。

PK 状态:连麦 PK 中的双方支持人数战绩展示。

商品信息:电商直播场景中,主播当前正在推广的商品信息。

语聊房、直播都是近些年娱乐消费侧的明星品类,而在企业级的远程会议场景,聊天室属性的使用也有一席之地——会议成员、人数等房间属性和主持人、管理员、参与者等角色信息和相应权限管理

优势领先

稳定可靠,实时同步,接口灵活

聊天室属性首先有必达实时的要求,比如麦位、角色等信息需要实时同步给聊天室的所有成员,且保持一定的秩序性,不会造成乱序等问题。

稳定可靠的架构设计

必达是对聊天室属性性能的核心要求,也就是业务所设置的属性能够稳定同步、不丢不乱,这其实考验的是整体的聊天室系统架构。

融云聊天室的系统架构如下图示,通过连接层、业务层、存储层的长连接、二级缓存、多活数据中心等方式保证响应速度和分发速度。

融云聊天室的系统架构

融云聊天室的系统架构

在海量用户高并发场景下,消息分发能力将决定着系统的性能。以一个百万级用户量的聊天室为例,一条上行消息对应百万倍分发。这种情况下,海量消息的分发,依靠单台服务器是无法实现的。

融云将一个聊天室的人员分拆到不同的消息服务上,在聊天室服务收到消息后向消息服务扩散,再由消息服务分发给用户。

融云聊天室消息分发流程

融云聊天室消息分发流程

分层存储保障实时同步

聊天室属性是以 Key 和 Value 的形式进行传递和存储的,属性的操作行为主要有两种:设置、删除。服务器存储属性也分两部分,分别是全量的属性集合,以及属性集合变更记录。如下图所示:

融云聊天室属性存储结构

融云聊天室属性存储结构

服务器存储的两份数据,提供了两种查询聊天属性的接口,分别是查询全量数据查询增量数据。这两种接口的组合应用极大地提升了聊天室属性的查询响应能力。

对于刚进入聊天室的成员,直接拉取全量聊天室属性数据进行展示。

对于已经拉取过全量数据的成员,通过属性变更记录集合(Key 为变更时间戳,Value 里存着变更的类型以及属性内容),有序提供这段时间内所有聊天室属性的变更记录,实现增量数据的快速同步,减轻客户端的轮询计算压力。

灵活响应业务需求

每个聊天室可设置 100 对属性信息(KV),每秒钟支持处理 100 次的属性设置,可极大地满足用户场景需求。

同时,融云聊天室属性还具备以下特性以灵活支持各类实用业务需求。

支持强制设置单个属性,满足各种规则设置需求以维持房间秩序和业务的顺利开展。单个属性设置 Key 和 Value 一一对应,先到先得,可用于聊天室成员的抢麦、上麦等功能;而强制设置单个属性,则可强制覆盖 Key 上存储的 Value 属性,用于管理员对不发言或离线麦位成员的强制替换。


支持批量设置聊天室的属性,比如业务中某个同类型、同权限的角色人物有多个,则可以一次性统一设置多个,且支持只占用一对 KV。

属性可随用户在线状态自动删除或持续保留,当用户下线或退出聊天室,可以选择设置其相关属性随其在线状态消失或持续保留。

比如,麦上用户离线,其相关属性随其下线自动删除,以保证用户异常掉线时可释放麦位;而若用户身份为管理员,则其设置的房间公告等影响房间秩序的属性可选择持续保留。


属性信息可实时同步客户的应用服务器,让业务方实时掌握聊天室的变化状态,提升数据分析能力,更好地支持业务运营。


支持房间信息预览,当用户浏览 App 而未进入房间时,可以获取聊天室属性信息,为其选择加入房间提供判断依据和吸引力。