跳到主要内容

监听成员上下线事件 - Websocket在线状态

前置条件

监听成员上下线事件

上下线事件总共有(action)四种类型:

  • join: 上线,成员成功订阅channel
  • leave: 离开,成员主动调用disconnect断开连接,或者主动调用unsubscribe方法取消该channel的订阅
  • timeout: 超时,成员订阅了 channel,因为网络原因,导致连接断开
  • back: 重新上线,成员订阅了channel,因为网络原因断开连接,在网络恢复后触发

如果一个成员(同一个id)同时打开了多个客户端,join和back仅在第一个客户端上线时触发, leave和timeout只会在最后一个下线的客户端下线时触发。

换句话说:

如果已经有一个客户端订阅了该channel并且当前是在线状态时,使用同一id的其他客户端上线时,不会触发上线提醒;
如果还存在一个客户端订阅了该channel并且当前是在线状态时,使用同一id的其他客户端下线时,不会触发下线提醒。

监听成员上下线事件


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);
},
});

取消监听成员上下线事件


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);
},
});

资费

  1. GoEasy每触发一次presenceEvent,扣减消息数1条
  2. 每个客户端收到一次presenceEvent,扣减消息数1条