监听成员上下线事件 - Websocket在线状态
前置条件
监听成员上下线事件
上下线事件总共有(action)四种类型:
- join: 上线,成员成功订阅channel
- leave: 离开,成员主动调用disconnect断开连接,或者主动调用unsubscribe方法取消该channel的订阅
- timeout: 超时,成员订阅了 channel,因为网络原因,导致连接断开
- back: 重新上线,成员订阅了channel,因为网络原因断开连接,在网络恢复后触发
如果一个成员(同一个id)同时打开了多个客户端,join和back仅在第一个客户端上线时触发, leave和timeout只会在最后一个下线的客户端下线时触发。
换句话说:
如果已经有一个客户端订阅了该channel并且当前是在线状态时,使用同一id的其他客户端上线时,不会触发上线提醒;
如果还存在一个客户端订阅了该channel并且当前是在线状态时,使用同一id的其他客户端下线时,不会触发下线提醒。
监听成员上下线事件
- Javascript
- Android
- iOS
pubsub.subscribePresence({
channel: "my_channel",
membersLimit: 20, //可选项,定义返回的最新上线成员列表的数量,默认为10,最多支持返回100个成员
onPresence: function (presenceEvent) {
console.log("Presence events: ", JSON.stringify(presenceEvent));
// {
// action: 'join',
// member: {id: 'user001', data: {avatar:'/www/xxx4.png', nickname: 'Tom'}},
// amount: 3000, //当前订阅该channel的在线成员总数
// memebers: [ //最新上线的20个成员列表
// {id: 'user001', data: {avatar:'/www/xxx1.png', nickname: 'Neo'}},
// {id: 'user002', data: {avatar:'/www/xxx2.png', nickname: 'Lucy'}},
// ....
// {id: 'user003', data: {avatar:'/www/xxx3.png', nickname: 'Jack'}},
// ]
// }
},
onSuccess: function () { //监听成功
console.log("subscribe presence successfully.")
},
onFailed: function (error) { //监听失败
console.log("Failed to subscribe presence, code:" + error.code + ",error:" + error.content);
},
});
val subscribePresenceOptions = SubscribePresenceOptions(
channel = "my_channel",
membersLimit = 20, //可选项,定义返回的最新上线成员列表的数量,默认为10,最多支持返回100个成员
onPresence = {event:PresenceEvent ->
/** PresenceEvent:
action: String
amount: Int
member: Member
- id: String
- data: Map<String, Any>
members: List<Member>
*/
},
onSuccess = {
Log.i("Channel","subscribePresence success")
},
onFailed = { error ->
Log.i("Channel","subscribePresence failed: code: ${error.code} data: ${error.data}")
}
)
GPubSub.subscribePresence(subscribePresenceOptions)
let subscribePresenceOptions = SubscribePresenceOptions(
channel: "my_channel",
membersLimit: 20, //可选项,定义返回的最新上线成员列表的数量,默认为10,最多支持返回100个成员
onPresence: { event in
/** PresenceEvent:
action: String
amount: Int32
member: Member
- id: String
- data: [String: Any]
members: [Member]
*/
},
onSuccess:{
print("subscribePresence success")
},
onFailed:{ result in
print("subscribePresence failed: code:\(result.code) data:\(result.data)")
}
)
GPubSub.subscribePresence(options: subscribePresenceOptions)
取消监听成员上下线事件
- Javascript
- Android
- iOS
pubsub.unsubscribePresence({
channel: "my_channel",
onSuccess: function () { //取消监听成功
console.log("unsubscribe presence successfully.")
},
onFailed: function (error) { //监听失败
console.log("Failed to unsubscribe presence, code:" + error.code + ",error:" + error.content);
},
});
val unSubscribePresenceOptions = UnSubscribePresenceOptions(
channel = "my_channel",
onSuccess = {
Log.i("Channel","取消订阅上下线成功")
},
onFailed = { error ->
Log.i("Channel","取消订阅上下线失败: code: ${error.code} data: ${error.data}")
}
)
GPubSub.unsubscribePresence(unSubscribePresenceOptions)
let unSubscribePresenceOptions = UnSubscribePresenceOptions(
channel: "my_channel",
onSuccess:{
print("取消订阅上下线成功")
},
onFailed:{ result in
print("取消订阅上下线失败: code:\(result.code) data:\(result.data)")
}
)
GPubSub.unsubscribePresence(options: unSubscribePresenceOptions)
资费
- GoEasy每触发一次presenceEvent,扣减消息数1条
- 每个客户端收到一次presenceEvent,扣减消息数1条