存在于 JavaScript 中

当用户从特定频道加入,离开或超时时,Presence 通过发送消息来工作。你可以收听这些消息以跟踪频道中的频道,以及他们执行任何操作的时间。

首先,确保每个用户都是 UUID。初始化 PubNub 时设置此项:

var pubnub = PUBNUB({
     publish_key: 'my_pub_key',
     subscribe_key: 'my_sub_key',
     uuid: '1234_some_uuid'
 });

现在,当你连接到频道时,为 join 事件添加额外的侦听器。

pubnub.subscribe({
    channel: "channel-1",
    message: function(m){console.log(m)}
    presence: onPresenceEvent,
});

onPresenceEvent = function(message, envelope, channel){
    if (!message.action) {
        // presence interval mode happens
        // when occupancy > presence announce max
        // there is no action key
        console.log("Presence Interval Mode: occupancy = " + m.occupancy);
        return;
    }

    console.log(
        "Action:    " + message.action + "\n" +
        "UUID:      " + message.uuid + "\n" +
        "Channel:   " + JSON.stringify(channel) + "\n" +
        "Occupancy: " + message.occupancy + "\n" +
        "Timestamp: " + message.timestamp);

    else if (m.action == 'join') {
        // new subscriber to channel
        // add the user to your buddy list
    }
    else if (m.action == 'leave') {
        // subscriber explicitly unsubscribed channel
        // remove user from your buddy list
    }
    else if (m.action == 'timeout') {
        // subscriber implicitly unsubscribed channel (did not unsubscribe)
        // remove user from your buddy list        
    }
    else if (m.action == 'state-change') {
        // subscriber changed state
        // update the attributes about the user in the buddy list
        // i.e. - is typing, online status, etc.
        console.log("State Data: " + JSON.stringify(message.data));
    }
};

发送到 presence 回调的消息对象将包括所执行的操作(加入,离开,超时或状态更改)以及执行操作的用户的 UUID,以及时间戳和一些其他元数据。

设置状态后,将发送 state-change 事件,该事件将包括 message 键的 data 键中的新状态。

注意 :如果启用了 Access Manager,则必须确保你的授权涵盖常规频道和在线频道。否则,当你尝试使用状态回调订阅频道时,SDK 还会为你订阅状态通道,如果你未应用授权,则会失败。在线通道名称是带有“-pnpres”后缀的常规通道名称; 意味着名为“pubnub-sensor-array”的通道将具有名为“pubnub-sensor-array-pnpres”的在线通道。有关更多信息,请参阅 Access Manager 示例。