频道
频道是 RTM 实时网络中一种数据传输的管理机制,任何订阅或加入频道的用户都可以在 100 毫秒内接收到频道中传输的消息和事件,RTM 允许客户端订阅数百甚至数千个频道。大多数 RTM API 都将以频道为基础进行发送、接收、加密等行为。
基于声网的能力,RTM 的频道分成三种类型以匹配不同的应用场景:
- Message Channel:遵循行业最标准的 Pub/Sub (发布/订阅)模式,频道无需提前创建,订阅频道即可在频道内收发消息。频道内的发布者和订阅者数量没有上限。
- User Channel:基于 Pub/Sub (发布/订阅)模式的点对点消息收发。用户无需订阅频道操作,可以直接指定用户 ID 发送消息,接收消息也只需监听
message
事件。 - Stream Channel:遵循行业类似观察者模式的 Room (房间)概念,用户需要创建并加入频道才能在频道内收发消息。频道中允许创建不同的 Topic,消息通过 Topic 进行组织和管理。
想要了解 Message Channel 和 Stream Channel 的更多用法及适用场景,可以查看:
subscribe
接口描述
RTM 提供消息、状态、事件变更等事件通知能力。通过设置事件监听,你可以接收已订阅频道中的消息和事件。关于如何添加和设置事件监听,详见事件监听章节。通过调用 subscribe
方法,客户端可以订阅 Message Channel 并开始接收频道中的消息和事件通知。成功调用该方法后,订阅该频道且开启 Presence 事件监听的用户会收到 REMOTE_JOIN
类型的 presence
事件,详见事件监听。
该方法仅适用于 Message Channel。
接口方法
你可以通过以下方式调用 subscribe
方法:
rtm.subscribe(
channelName: string,
options?: object
): Promise<SubscribeResponse>;
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
channelName | string | 必填 | - | 频道名称。 |
options | object | 选填 | - | 订阅频道选项。 |
options
包含以下属性:
属性 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
withMessage | boolean | 选填 | true | 是否订阅此频道中的消息事件通知。 |
withPresence | boolean | 选填 | true | 是否订阅此频道中的 Presence 事件通知。 |
beQuiet | boolean | 选填 | false | 是否静默订阅频道。该参数设置为
|
withMetadata | boolean | 选填 | false | 是否订阅此频道中的 Storage 事件通知。 |
withLock | boolean | 选填 | false | 是否订阅此频道中的 Lock 事件通知。 |
基本用法
const options ={
withMessage : true,
withPresence : true,
beQuiet : false,
withMetadata : false,
withLock : false
};
try {
const result = await rtm.subscribe("chat_room", options);
console.log(result);
} catch (status) {
console.log(status);
}
返回值
如果方法调用成功,则 SDK 返回一个 SubscribeResponse
类型数据结构:
type SubscribeResponse = {
timestamp : number // 操作成功时间戳
channelName : string // 本次操作的频道名称
}
如果方法调用失败,则返回一个 ErrorInfo
类型数据:
type ErrorInfo = {
error: boolean; // 本次操作是否出错
operation: string; // 本次操作的 API 名称
errorCode: number; // 错误码
reason: string; // 错误描述
}
你可以通过检索 errorCode
字段的错误码了解错误原因,并找到对应的解决方法。
unsubscribe
接口描述
如果你不再需要关注某个频道,可调用unsubscribe
方法取消订阅该频道。成功取消订阅该频道后,其他订阅该频道并开启事件监听的用户会收到 REMOTE_LEAVE
类型的 presence
事件通知,详见事件监听。
该方法仅适用于 Message Channel。
接口方法
你可以通过以下方式调用 unsubscribe
方法:
rtm.unsubscribe(
channelName: string
): Promise<UnsubscribeResponse>;
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
channelName | string | 必填 | - | 频道名称。 |
基本用法
try {
const result = await rtm.unsubscribe("chat_room");
console.log(result);
} catch (status) {
console.log(status);
}
返回值
如果方法调用成功,则 SDK 返回一个 UnsubscribeResponse
类型数据结构:
type UnsubscribeResponse = {
timestamp : number // 操作成功时间戳
channelName : string // 本次操作的频道名称
}
如果方法调用失败,则返回一个 ErrorInfo
类型数据:
type ErrorInfo = {
error: boolean; // 本次操作是否出错
operation: string; // 本次操作的 API 名称
errorCode: number; // 错误码
reason: string; // 错误描述
}
你可以通过检索 errorCode
字段的错误码了解错误原因,并找到对应的解决方法。
createStreamChannel
接口描述
在使用 Stream Channel 之前,你需要先调用createStreamChannel
方法创建 RTMStreamChannel
实例。成功创建实例后,你可以调用其相关方法,例如:加入频道、离开频道、发送 Topic 消息、订阅 Topic 消息等。
该方法仅适用于 Stream Channel。
接口方法
你可以通过以下方式调用 createStreamChannel
方法:
rtm.createStreamChannel(chanelName: string): RTMStreamChannel;
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
channelName | string | 必填 | - | 频道名称。 |
基本用法
try{
const Loc_stChannel = await rtm.createStreamChannel( "Location");
console.log("Create Stream Channel success!: ");
} catch (status){
console.log(status);
}
返回值
一个 RTMStreamChannel
实例。
join
接口描述
成功创建 Stream Channel 后,你可以调用 join
方法加入 Stream Channel。加入频道后,你才能进行频道相关操作。此时,订阅该频道并添加事件监听的用户会收到如下事件通知:
- 本地用户:
SNAPSHOT
类型的presence
事件通知。SNAPSHOT
类型的topic
事件通知。
- 远端用户:
REMOTE_JOIN
类型的presence
事件通知。
该方法仅适用于 Stream Channel。
接口方法
你可以通过以下方式调用 join
方法:
join(options?: object): Promise<JoinChannelResponse>;
参数 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
options | object | 选填 | - | 加入频道选项。 |
options
包含以下属性:
属性 | 类型 | 是否必填 | 默认值 | 描述 |
---|---|---|---|---|
token | string | 选填 | - | 加入 Stream Channel 的 Token。
|
withPresence | boolean | 选填 | true | 是否订阅此频道中的 Presence 事件通知。 |
beQuiet | boolean | 选填 | false | 是否静默加入频道。该参数设置为
|
withMetadata | boolean | 选填 | false | 是否订阅此频道中的 Storage 事件通知。 |
withLock | boolean | 选填 | false | 是否订阅此频道中的 Lock 事件通知。 |
基本用法
const options ={
token : "yourToken",
withPresence : true,
beQuiet : false,
withMetadata : false,
withLock : false
};
try {
const result = await stChannel.join(options);
console.log(result);
} catch (status) {
console.log(status);
}
返回值
如果方法调用成功,则 SDK 返回一个 JoinChannelResponse
类型数据结构:
type JoinChannelResponse = {
timestamp : number, // 操作成功时间戳
channelName : string // 本次操作的频道名称
}
如果方法调用失败,则返回一个 ErrorInfo
类型数据:
type ErrorInfo = {
error: boolean; // 本次操作是否出错
operation: string; // 本次操作的 API 名称
errorCode: number; // 错误码
reason: string; // 错误描述
}
你可以通过检索 errorCode
字段的错误码了解错误原因,并找到对应的解决方法。
leave
接口描述
如果你不再需要待在某个频道中,你可以调用leave
方法离开该频道。离开后你将不再会接收到此频道中的任何消息、状态及事件通知,你在该频道中创建的 Topic 发布者的角色及你与所有 Topic 的订阅关系都将自动解除。如果想再次恢复之前的发布者角色和订阅关系,你需要调用 join
方法再次进入该频道并自行调用 joinTopic
和 subscribeTopic
方法进行设置。
成功离开频道后,频道中的远端用户会收到 REMOTE_LEAVE
类型的 presence
事件通知,详见事件监听。
该方法仅适用于 Stream Channel。
接口方法
你可以通过以下方式调用 leave
方法:
leave(): Promise<LeaveChannelResponse>;
基本用法
try{
const result = await streamChannel.leave();
console.log(result);
} catch (status){
console.log(status);
}
返回值
如果方法调用成功,则 SDK 返回一个 LeaveChannelResponse
类型数据结构:
type LeaveChannelResponse = {
timestamp : number // 操作成功时间戳
channelName : string // 本次操作的频道名称
}
如果方法调用失败,则返回一个 ErrorInfo
类型数据:
type ErrorInfo = {
error: boolean; // 本次操作是否出错
operation: string; // 本次操作的 API 名称
errorCode: number; // 错误码
reason: string; // 错误描述
}
你可以通过检索 errorCode
字段的错误码了解错误原因,并找到对应的解决方法。