【问题标题】:Detecting Disconnection with PubNub for Javascript使用 PubNub for Javascript 检测断开连接
【发布时间】:2012-11-02 18:50:10
【问题描述】:

我正在使用 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 代码中实现这一点(骨架代码是可以的)?

提前致谢。

附:我不想使用 Socket.IO

【问题讨论】:

    标签: javascript pubnub


    【解决方案1】:

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

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

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

    在任何支持 JavaScript 的设备(例如 移动 手机和网络浏览器)上检测您与互联网的本地连接状态都很简单。您将使用一些高级 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 Presence; PubNub 的一项功能,可让您在好友在线或离线时检测好友的连接并接收远程连接事件。

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

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

    // 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 存在回调事件接收远程连接状态更新(朋友连接状态)。

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

    PubNub 存在资源

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

    【讨论】:

    • 离线意味着用户离开频道?
    【解决方案2】:

    另请参阅 help.pubnub.com 知识库中的频道状态常见问题解答。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 2012-12-10
      • 2020-07-07
      • 2013-02-10
      相关资源
      最近更新 更多