Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

房间管理

qinwei edited this page Dec 14, 2022 · 7 revisions

房间管理是SONA平台最基础的功能,主要包含以下几个:

  • 创建房间
  • 关闭房间
  • 进入房间
  • 离开房间
  • 设置管理员
  • 踢人
  • 拉黑/取消拉黑
  • 禁言/取消禁言
  • 在线列表

聊天室与群组

SONA的房间分为 聊天室与群组,虽然都是房间,但是模式不一样,二者之间有比较明显的区别

聊天室

  • 一个用户同一时间只能加入一个房间
  • 房间没有人数限制
  • 不支持离线消息
  • 消息会有频控,不保证所有消息必达
  • 长连接断开即认定为离开房间,也会从在线列表中移除

群组

  • 一个用户可以同时加入多个群组
  • 群组一般都有人数限制
  • 支持离线消息
  • 消息没有频控,一般会基于推拉结合的方式保证消息不丢
  • 只有主动退出群组,才会从群组人员列表中移除

所有房间管理的操作都通过调用sona-service中的dubbo接口来实现,内部会自动根据申请的ProductCode 区分聊天室与群组

cn.bixin.sona.api.room.SonaRoomRemoteService

ProductCode

SONA平台是基于 产品码(ProductCode)来扩展的,不同的业务场景需要单独申请一个ProductCode,后续对房间的操作都基于 ProductCode 来关联。

使用步骤:

1、需要先在 t_product_config 表中新增一条记录

例如:现在有一个 直播业务,使用的聊天室模式,新增 product_code 为 LIVING,指定im_module 为 CHATROOM, 并添加相应的 房间相关配置 如果是 游戏房业务,使用的群组模式,新增 product_code 为 GAMING,指定im_module 为 GROUP, 并添加相应的 房间相关配置

CREATE TABLE `t_product_config` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `product_code` varchar(32) NOT NULL DEFAULT '' COMMENT '产品码',
 `short_code` varchar(16) NOT NULL COMMENT '产品短码',
 `im_module` varchar(16) NOT NULL DEFAULT '' COMMENT 'im模块 CHATROOM=聊天室 GROUP=群组',
 `stream_supplier` varchar(16) NOT NULL DEFAULT '' COMMENT '流供应商',
 `type` varchar(16) NOT NULL DEFAULT '' COMMENT '流类型 AUDIO=音频流 VIDEO=视频流',
 `push_mode` varchar(16) NOT NULL DEFAULT '' COMMENT '推流模式',
 `pull_mode` varchar(16) NOT NULL DEFAULT '' COMMENT '拉流模式',
 `enter_notify_switch` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否下发进房消息',
 `check_admin` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否校验管理员 0=否 1=是',
 `need_replay` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否需要回放功能 0=否 1=是',
 `client_type` tinyint(4) NOT NULL DEFAULT '2' COMMENT '客户端类型 1=weblink 2=commonlink 3=wechatlink',
 `bitrate` int(11) NOT NULL DEFAULT '96000' COMMENT '播放器码率',
 `im_send_type` tinyint(4) DEFAULT '1' COMMENT '短连 1 长连2',
 `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `product_code` (`product_code`),
 UNIQUE KEY `short_code` (`short_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品配置表';

2、调用 创建房间 接口,请求参数里指定 申请的 ProductCode,接口会返回创建的 roomId,

业务方调用创建房间接口后,可以在自己的数据库中保存sona的 roomId,并和自己的业务房间号做映射,后续对房间的操作直接基于roomId,不需要再带上ProductCode了

房间配置

SONA 中有2张房间配置表,配置字段完全一样 :

  • t_product_config 基于ProductCode维度的配置

  • t_room_config 基于房间维度的配置

如果当前 roomId 单独配置了 t_room_config,则以t_room_config中的配置为准

CREATE TABLE `t_room_config` (
 `room_id` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '房间ID',
 `product_code` varchar(32) NOT NULL DEFAULT '' COMMENT '产品码',
 `im_module` varchar(16) NOT NULL DEFAULT '' COMMENT 'im模块 CHATROOM=聊天室 GROUP=群组',
 `stream_supplier` varchar(16) NOT NULL DEFAULT '' COMMENT '流供应商',
 `type` varchar(16) NOT NULL DEFAULT '' COMMENT '流类型 AUDIO=音频 VIDEO=视频',
 `push_mode` varchar(16) NOT NULL DEFAULT '' COMMENT '推流模式',
 `pull_mode` varchar(16) NOT NULL DEFAULT '' COMMENT '拉流模式',
 `enter_notify_switch` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否下发进房消息',
 `check_admin` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否校验管理员 0=否 1=是',
 `need_replay` tinyint(4) NOT NULL DEFAULT '1' COMMENT '是否需要回放功能 0=否 1=是',
 `client_type` tinyint(4) NOT NULL DEFAULT '2' COMMENT '客户端类型 1=weblink 2=commonlink 3=wechatlink',
 `bitrate` int(11) NOT NULL DEFAULT '96000' COMMENT '播放器码率',
 `im_send_type` tinyint(4) DEFAULT '1' COMMENT '1=短连 2=长连',
 `short_code` varchar(16) NOT NULL DEFAULT '' COMMENT '产品短码',
 `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
 PRIMARY KEY (`room_id`),
 KEY `idx_product_code` (`product_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='房间配置表';

进入房间

sona/enter 接口主要是为了拿到当前房间的配置,包括IM和实时音视频的相关配置

如果当前房间是群组模式,会把当前用户加入到群组中

enter成功后,sona-sdk 就会和 长连接网关建立一条房间连接,后续可以通过长连接收发消息

在线列表

  1. 对于群组模式的房间,获取列表就是 当前群组的所有用户列表,不管用户是否长连在线
  2. 对于聊天室模式的房间,获取在线列表,是拿到当前房间内所有长链在线的用户列表

对于sona来说,用户是否在线,完全依赖长连接,长连在就认为在线,长链不在就认为离线

由于移动网络的不稳定,长连可能会频繁的断链重连,为了规避这种情况,在线列表处理时会延时检测,在长连异常断开后不会立刻就从在线列表中移除,而是延迟一定时间后再次判断长连是否重连成功,如果成功则不做任何操作,失败则从在线列表中移除

如果是正常的业务leave 则立即从在线列表中移除

online

其他操作

其他房间操作比较简单,可以参考 sona 的接口文档描述

接口文档

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /