PubNub最佳实践:如何管理私人房间?

Bay*_*ock 2 private multiplexing socketchannel pubnub

我正在学习pubnub并且我阅读了他们的文档,但我找不到如何管理多房间聊天框.

默认情况下,任何人都可以收听频道.订阅它并在其上发布很容易.

我想要的是拥有一个主要的公共房间(到目前为止一直很好),但任何人都应该能够私下与其他人交谈而不会被其他用户阅读.

这些动态房间将被标记,用户应该能够从一个房间到另一个房间.

另一个要求是私下与某人交谈不会让你离开你订阅的其他房间(你仍然可以通知你在聊天时在另一个房间发布了一条新消息)

实现这一目标的最佳做法是什么?

  • 我会使用不同的频道(动态创建)吗?
  • 我会使用一个频道并根据他们的状态,伪房间ID或主角过滤消息吗?
  • 我会使用多路复用(仅限一个插槽)吗?

我需要知道实现这一目标的最佳方法,因为文档仅描述了单个房间的基本情景,而且在互联网上没有任何相关内容.

谢谢.

PS:我知道PubNub一次不建议超过2个频道(即使我很难找到解释).

PPS:我正在使用punbub和socket.io

Ste*_*lum 10

Socket.IO和PubNub管理聊天服务的私人房间

您正在寻找一种方法来创建一个多房间聊天服务,可能类似于IRC客户端,您可以在其中加入并坐在多个聊天室中(例如,在freenode.net上).这是可能的,并且将采取一些特殊任务来使您正确.

您将从打开两个频道开始,一个用于主聊天室,另一个用于私人"ME"侧聊天.使用此侧私有"ME"频道,您将需要创建一个长且不可预测的会话ID样式频道名称,通常如下所示:

YTQyOGFiNWEtNTZmZC00OGVhLTgxZjktMWE3ZmMyMzc3MTRhCg==
Run Code Online (Sandbox Code Playgroud)

这就像是用户的参考ID.此ID可用于私人1对1聊天,而其他房间可用于群聊.您将使用我们称之为PubNub Access Manager(PAM)的访问控制管理来保护此群聊.

对于其他安全实践,您需要在我们的帮助台和知识库上查看PubNub安全支持中提供的安全建议指南.

现在我们已经建立了专用通道,通过您的私人服务器(可以提供权限的服务器)发送和接收聊天,以允许基于每个用户中继消息,可以实现安全通信.您可以通过阅读PubNub上从服务器发送事件到套接字IO客户端文档的这一部分来了解如何执行此操作.

第二个频道将用于所有房间的公共聊天.对于Multi-tab支持,您只需通过io.connect()方法添加新房间,即可在PubNub上使用Socket IO的通道多路复用功能.每次打开一个新选项卡时,您将通过io.connect()打开一个新的命名空间,您可以无限制地使用它.但请注意,您一次只能连接到不超过2个PubNub频道(您已在问题中注明过).

以下是订阅多个订阅源和类别的PubNub Socket IO方法:

Socket.IO文档

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io#restricting-yourself-to-a-namespace

Vimeo上的Socket.IO视频

http://vimeo.com/34496366

示例Socket.IO多路复用代码

https://github.com/pubnub/pubnub-api/tree/493d7fc97fb683379fc78be3ca7ad9bc97eb4200/socket.io/multiplexing

作为一个快速的结论,您将使用安全方法建立一个私人"ME"通道,以基于每个用户发送/接收消息.以及推送所有公共聊天室数据的公共"聊天"频道.多路复用对于公共聊天非常重要.

  • 谢谢.我很荣幸能从PubNub的创始人那里得到答案!我读了这些参考文献,但作为初学者,我不得不承认我正在努力解决一些问题.私人频道很容易作为一个概念得到,但没有示例显示如何从A到Z实现它们.这不是一个抱怨,因为我确信它对任何受过教育的开发人员都有意义,但对我来说,这是一个相当严峻的考验.我只是发现它不是我需要声明的通道,以便与目标用户进行通信,而不是"socket.emit"方法的第一个参数.很简单,但我没有在任何地方阅读它. (2认同)

小智 6

上面的答案在2012年是正确的,但从那以后发生了很多变化.私人聊天室可以使用PubNub Access Manager启用,该管理器明确授予特定频道上的发布/订阅访问权限.

这种方式的工作方式是通过访问令牌(又名"Auth Key").开发人员(您)创建一个Auth Key(基本上是任何字符串)并将其传递给PubNub Access Manager.然后,您可以为此Auth Key设置规则(即,Auth Key可以发布和/或订阅哪些通道).

此Auth Key提供给需要访问该通道的任何设备,并在设备订阅或发布到该通道时使用.

基本文档可在此处获得:http://www.pubnub.com/docs/javascript/tutorial/access-manager.html

授予60分钟读/写权限以将"privateChat"引导至auth_key:

 pubnub.grant({
 channel  : 'privateChat',
 auth_key : 'abxyz12-auth-key-987tuv',
 read     : true,
 write    : true,
 ttl      : 60
 });
Run Code Online (Sandbox Code Playgroud)