【问题标题】:using PubNub for multi users chatting使用 PubNub 进行多用户聊天
【发布时间】:2014-04-14 03:19:29
【问题描述】:

我正在设计一个使用 PubNub 实时消息的应用程序。 我面临一个关于一对一聊天的问题。 这是我的场景:

我有一个用户 A,所以如果 A 想要接收来自另一个用户的所有消息,A 必须订阅一个公共频道,称为 PUB 频道。

用户 B 知道 A 的公共频道,因此 B 或其他人可以向该频道发送消息。 现在就好了。

但是当我打开应用程序时,我想显示我已发送消息的用户列表或新人发送给我的离线消息。

我可以从我的公共频道获取所有消息。但是如何过滤用户呢?在消息很多的情况下,这太难了。

有了所有这些,我只想得到我和 C,或者我和 B...等的消息 有人对此有想法吗? 谢谢,

【问题讨论】:

    标签: chat channel multi-user pubnub


    【解决方案1】:

    PubNub 多用户聊天和交流

    每个用户都有自己的专用频道。 Bob 拥有"bob12345" 频道,Sally 拥有"sally12345" 频道。当用户想要互相交谈时,他们会直接向所有者的频道名称发送消息。 Bob 将在 Sally 的频道上pubnub.publish({...})

    pubnub.publish({ 
        channel : 'sally12345', 
        message : { from: 'bob12345', message: 'Hi!' }
    });
    

    请注意,您需要使用PubNub Access Manager to Grant Write-only access globally 授予全局写入权限。同时授予频道所有者只读权限。

    每个用户都应始终将他们的消息本地存储在他们的设备上或加载所有历史记录并保存。

    如何仅加载两个用户之间的对话

    如果您想从特定用户的对话中加载消息,您需要发布到侧通道以索引消息以供将来检索。您可以通过发布到由 Bob 和 Sally 的频道名称串联而成的私有侧频道来做到这一点。

    // Publish a second time to index the message in a side channel.
    pubnub.publish({ 
        channel : 'history-sally12345-bob12345', 
        message : { from: 'bob12345', message: 'Hi!' }
    });
    

    现在您可以加载此特定用户的历史记录。

    // Load history for dedicated conversation.
    pubnub.history({ 
        channel  : 'history-sally12345-bob12345', 
        callback : function(messages) { 
            console.log(messages);
        }
    });
    

    【讨论】:

    • 我在想你的方式,使用公共频道接收所有请求和历史频道以获得 2 个用户之间的对话。
    • 如果有新用户给我发消息,或者当我离线时,我的意思是用户 A,给我发消息 3 次,1-2-3,我会将消息 1 替换为 2,并且2 和 3,所以第三条消息将存储在公共频道(也将所有消息存储在我的历史频道中与 A)。但是我担心公共频道上什么时候有很多消息,比如 2000 条用户消息,如果我想替换 A 的第一条消息,我必须得到所有消息,所以我不知道我能不能这样做?
    • 在这种情况下,您需要加载所有消息,或者只是限制消息数量并忽略任何修改。此外,我还有一个隐藏的 URL,当涉及到数据同步更改时,它可能包含您正在寻找的内容。给我发邮件到 stephen@pubnub.com,我可以把链接发给你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多