2026/02/12 16:16:25
事件通知
添加事件监听
接收 Presence 事件通知,你需要实现事件监听程序,详见事件监听。除此之外,。PresenceEvent 数据结构包含以下属性:
事件通知类型
Presence 事件通知有五种类型,它们分别是:
事件通知模式
Presence 事件通知模式是指在频道中如何将 Presence 事件通知到订阅用户。有两种模式:实时通知模式(Announce) 和 定时通知模式(Interval)。用户可以在控制台的项目设置中通过实时通知最大人数大小来决定两种模式相互切换的条件。定时通知模式可防止频道内在线用户过多而导致的事件嘈杂。实时通知最大人数可以设置的范围为 [8,128],如果你的需求超出此范围,需要联系声网 RTM 团队(rtm-support@shengwang.cn)另行调整。
实时通知模式
如果频道中的在线人数小于实时通知最大人数(默认是 50)参数设定的值,则 Presence 事件通知处于实时通知模式。在此模式下,REMOTE_JOIN_CHANNEL、REMOTE_LEAVE_CHANNEL、REMOTE_TIMEOUT、REMOTE_STATE_CHANGED 事件在触发时会立即发送到客户端。
- Join
- Leave
- Timeout
- Snapshot
- State Change
TypeScript
{
eventType: RtmPresenceEventType.REMOTE_JOIN_CHANNEL,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "Tony",
stateChanged: [],
interval: null,
snapshot: null,
timestamp: 1710487149497
}
TypeScript
{
eventType: RtmPresenceEventType.REMOTE_LEAVE_CHANNEL,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "Tony",
stateChanged: [],
interval: null,
snapshot: null,
timestamp: 1710487149497
}
TypeScript
{
eventType: RtmPresenceEventType.REMOTE_TIMEOUT,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "Tony",
stateChanged: [],
interval: null,
snapshot: null,
timestamp: 1710487149497
}
TypeScript
{
eventType: RtmPresenceEventType.SNAPSHOT,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "",
stateChanged: [],
interval: null,
snapshot: [
{ userId: "user_a", states: [] },
{ userId: "user_b", states: [{ key: "key_1", value: "value_1" }] },
{ userId: "yourSelf", states: [] }
],
timestamp: 1710487149497
}
TypeScript
{
eventType: RtmPresenceEventType.REMOTE_STATE_CHANGED,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "Tony",
stateChanged: [
{ key: "key_1", value: "value_1" }
],
interval: null,
snapshot: null,
timestamp: 1710487149497
}
定时通知模式
当频道中的在线人数超过实时通知最大人数的值时,频道会进入定时通知模式。在这种模式下,REMOTE_JOIN_CHANNEL、REMOTE_LEAVE_CHANNEL、REMOTE_TIMEOUT、REMOTE_STATE_CHANGED 事件会被 INTERVAL 事件代替,并以一定的时间间隔发送给频道中所有用户。
TypeScript
{
eventType: RtmPresenceEventType.INTERVAL,
channelType: RtmChannelType.MESSAGE,
channelName: "chat_room",
publisher: "",
stateChanged: [],
interval: {
join: ["Tony", "Lily"],
leave: ["Jason"],
timeout: ["Wang"],
userStateList: [
{
userId: "Harvard",
states: [
{ key: "Mic", value: "False" },
{ key: "Position", value: "Beijing" }
]
},
{
userId: "Alice",
states: [
{ key: "Mic", value: "True" },
{ key: "Position", value: "Shanghai" }
]
}
]
},
snapshot: null,
timestamp: 1710487149497
}