使用 Topic
Topic 的相关操作主要加入、离开、订阅和取消订阅,可以归纳为两种行为:
- 消息发布者行为:加入 Topic 的目的在于注册成为该 Topic 的消息发布者,从而让用户具备发送消息的能力。同理,离开 Topic 是为了取消对该 Topic 消息发布者的注册,从而让用户失去发送消息的能力。
- 消息订阅者行为:订阅 Topic 的目的在于订阅 Topic 中的消息,从而让用户具备接收消息的能力。同理,取消订阅 Topic 是为了取消订阅 Topic 中的消息,从而让用户失去接收消息的能力。
上述两类行为之间相互独立,即你对某个 Topic 中消息发布者的行为并不会影响你对该 Topic 中消息订阅者的行为。
加入 Topic
在 Topic 中发送消息前提条件是加入 Topic 。当前 RTM 支持单个客户端在同一个频道内同时加入不超过 8 个 Topic 。
当你在加入 Topic 的时候,你可以通过 options
参数设置一些预定义的属性,这将影响到后续在通过此 Topic 发送的消息的行为,包括消息是否保序、消息优先级、是否与共频道传输的音视频数据保持同步传输等。详细设置可以参考 API 文档及发送消息。
当你成功加入频道后,即触发了 REMOTE_JOIN
类型的 topic
事件,频道中所有开启 Topic 事件监听的用户将会收到此事件通知。
示例代码如下:
const topicName = "test_topic";
try {
const joinTopicResult = await streamChannel.joinTopic(topicName);
} catch (status) {
const { operation, reason, errorCode } = status;
console.log(`${operation} failed, the error code is ${errorCode}, because of: ${reason}.`);
}
离开 Topic
当你不再需要向某个 Topic 发送消息,或者同时加入的 Topic 超出数量限制时,你可以离开某个 Topic 以释放资源。
当你成功离开 Topic 后,即触发了 REMOTE_LEAVE
类型的 topic
事件,频道中所有开启 Topic 事件监听的用户将会收到此事件通知。
示例代码如下:
const topicName = "test_topic";
try {
const leaveTopicResult = await streamChannel.leaveTopic(topicName);
} catch (status) {
const { operation, reason, errorCode } = status;
console.log(`${operation} failed, the error code is ${errorCode}, because of: ${reason}.`);
}
订阅 Topic
加入 Topic 并不意味者你可以接收到该 Topic 中传输的消息,你需要订阅此 Topic 并指定订阅此 Topic 中的消息发布者才能实现消息的接收。在单个频道中,你可以同时可以订阅不超过 50 个 Topic ,每个 Topic 中你可以同时订阅不超过 64 个消息发布者。限制主要处于端侧带宽和性能平衡的考虑。
订阅 Topic 中消息发布者需要填写消息发布者列表(userList
)参数。假设第一次调用该方法时,订阅消息发布者列表为 [UserA,UserB]
, 第二次调用该方法时,订阅消息发布者列表为 [UserB,UserC]
,则最后成功订阅的结果是 [UserA,UserB,UserC]
。
如果你在订阅 Topic 时,不填写消息发布者列表,则默认随机订阅不超过 64 个用户:如果 Topic 中的用户不超过 64 人则全部订阅;如果超过 64 人则随机订阅。
示例代码如下:
const topicName = "test_topic";
const subscribeTopicOptions = {
users: ['user_name'],
};
try {
const subTopicResult = await streamChannel.subscribeTopic(topicName, subscribeTopicOptions);
} catch (status) {
const { operation, reason, errorCode } = status;
console.log(`${operation} failed, the error code is ${errorCode}, because of: ${reason}.`);
}
取消订阅
当你对 Topic 中某个消息发布者的消息不再感兴趣,或者对整个 Topic 不再关注,你可以通过取消订阅停止接收相关消息。
如果你在取消订阅 Topic 时,不填写消息发布者列表,则默认取消对整个 Topic 的订阅。
示例代码如下:
const topicName = "test_topic";
const unsubscribeTopicOptions = {
users: ['user_name'],
};
try {
const unsubTopicResult = await streamChannel.unsubscribeTopic(topicName, subscribeTopicOptions);
} catch (status) {
const { operation, reason, errorCode } = status;
console.log(`${operation} failed, the error code is ${errorCode}, because of: ${reason}.`);
}