2

我正在使用 PubNub 创建一个人对人的聊天应用程序。

基本上,每个用户都订阅了自己的频道,然后双方以即时消息方式将消息发送到彼此的频道。

消息然后显示在页面上。我为此使用 JQuery。

pubnub.subscribe({
    restore  : true,
    channel  : 'my_channel',
    callback : function(message) {
        console.log(JSON.stringify(message));
        $('div.chatbox').append('<div>'+message+'</div>');
    }
});

但是,我希望能够检测到用户何时下线(我并不关心他们是如何下线的,只是与对方的连接不再可用)。

那么如果用户 1 和用户 2 正在通话,那么用户 2 就下线了,PubNub 端有什么机制可以让用户 1 来检查用户 2 的连接状态吗?我将如何在 JS 代码中实现这一点(骨架代码可以)?

提前致谢。

PS 我不想使用 Socket.IO

4

2 回答 2

8

如何使用 PubNub 检测丢失的朋友和自己(本地)网络连接

为了检测移动设备、平板电脑和 Web 设备上断开的网络连接,您可以使用 PubNub 通过绑定到 PubNub JavaScript API 中的内置事件来显示连接状态。了解断开连接和重新连接状态有几个方面。此外,使用 PubNub,您可能会对在线朋友的连接/断开事件的社交发现感兴趣。这样你就可以有绿点效果来指示你的朋友在线状态和一个红点当你的朋友离线时。我们将从两个方面进行连接状态跟踪,以便您能够检测并通知您的用户何时他们自己的设备离线/在线以及他们的朋友何时在线/离线。

使用 JavaScript PubNub API 检测本地连接状态

在任何支持 JavaScript 的设备(例如手机和 Web 浏览器)上检测您与 Internet 的本地连接状态都很简单。您将使用一些高级 PubNub 参数来访问在连接状态更改期间触发的回调。在应用程序代码中注册回调很容易。这是一个快速复制/粘贴的起点,您可以将其放在后袋中:

<div pub-key="demo" sub-key="demo" id="pubnub"></div>
<script src="http://cdn.pubnub.com/pubnub-3.3.min.js"></script>
<script>(function(){

// LISTEN FOR MESSAGES
PUBNUB.subscribe({
    channel    : "hello_world",      // CONNECT TO THIS CHANNEL.
    restore    : true,               // STAY CONNECTED, EVEN WHEN BROWSER IS
                                     // CLOSED OR WHEN PAGE CHANGES.
    callback   : alert,              // FUNCTION TO RUN ON MESSAGE RECEIVED.

    disconnect : function() {        // LOCAL LOST CONNECTION.
        alert("Connection Lost.")
    },
    reconnect  : function() {        // CONNECTION RESTORED.
        alert("And we're Back!")
    },
    connect    : function() {        // CONNECTION ESTABLISHED.
        PUBNUB.publish({             // SEND A MESSAGE.
            channel : "hello_world",
            message : "Hi from PubNub."
        }) 
    }
})

})();</script>

注意:上面显示的是注册本地设备连接事件的简单方法。

现在是时候谈谈 PubNub 的存在了;PubNub 的一项功能,可让您在朋友在线或离线时检测朋友的连接并接收远程连接事件。

使用 PubNub 在线检测好友在线/离线状态

接下来,您想了解如何检测您的朋友在线和离线时的连接状态。您也可以注册这些活动,但您需要做更多的工作,因为您需要提供用户的 ID(或抽象 ID)。您可以通过 PubNub 的存在来做到这一点,但它涉及的更多一些,我将向您发送两篇博文,让您快速上手。在我送你之前,我将向你展示重要的代码片段,用于注册来自你朋友的远程在线/离线事件通知:

// Open Bidirectional Socket Connection with
// REMOTE Connection Detect "Presence" Events.
PUBNUB.subscribe({
    channel  : "my_channel", // Channel Name
    connect  : connect,      // OnConnect Callback
    callback : alert,        // Received Message Callback
    presence : presence      // Presence Callback
});

注意:通过 PubNub 存在回调事件接收远程连接状态更新(朋友连接状态)。

在代码示例中,您将看到一个存在回调。此参数选项需要一个函数引用,当您的朋友在同一 PubNub 频道上发生连接更改(在线/离线)时,将执行该函数引用。好的,现在您已经掌握了要点,您需要查看以下博客文章,以帮助您了解有关 PubNub 存在的具体细节。

PubNub 存在资源

使用上述链接和参考资料了解您需要了解的有关 PubNub Presence 的所有信息

于 2012-11-03T06:18:42.707 回答
2

另请参阅 help.pubnub.com 知识库中的 Channel Presence FAQ。

将 socket.io 用于在线状态功能仅限于客户端(通常,您的服务器还需要获取在线状态信息来管理客户端交互或对话),并且是一个非常健谈的协议,会导致过度的电池消耗和移动设备上的数据计划浪费电话。

于 2012-11-03T11:19:47.693 回答