-->

PubNub最佳实践:如何管理私人房间?(PubNub best practice: How to

2019-07-29 06:59发布

我正在学习pubnub,我阅读他们的文档,但我无法找到如何管理多房间聊天框。

默认情况下,通道可以被任何人听。 订阅并发布就可以很方便。

我要的是有一个主要的公共房间(到目前为止好),但任何人都应该也可以私下跟别人而不被其他用户读取的风险。

这些动态的房间将标签和用户应该能够从一个到另一个去。

另一个要求将是私下与人交谈,不踢你出你订阅的其他房间(你仍然可以通知新的消息已经被张贴在另一个房间一边闲聊)

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

  • 我会用不同的信道(动态创建的)?
  • 我会根据他们的状态,伪房间ID或主角使用一个通道和过滤消息?
  • 我会用复用(只有一个插座)?

我需要知道实现这一目标的文献中描述了单间基本方案并没有什么关于这个互联网上的最佳途径。

谢谢。

PS:我知道PubNub不会在同一时间(即使我有一个很难找到的这个解释)建议超过2个声道。

PPS:我使用punbub与socket.io

Answer 1:

Socket.IO和PubNub管理包房聊天服务

您所要求的一种方式来创建一个多房间聊天服务,可能类似于IRC客户端,您可以加入和旁听多个聊天室(上freenode.net例如)在哪里。 这是可能的,并会采取一些特殊的任务得到它的权利在你的一部分。

您将打开两个通道 ,一个是主聊天室,一个用于私人“ME”边聊天开始。 用此方私人“ME”频道,你需要创建通常看起来像这样一个长期和不可预知的会话ID样式频道名:

YTQyOGFiNWEtNTZmZC00OGVhLTgxZjktMWE3ZmMyMzc3MTRhCg==

这就好比用于用户的参考ID。 这个ID可以用于私人1对1聊天和其他房间可用于组聊天 。 你会使用门禁管理,我们称之为确保这一组聊天PubNub访问管理器 (PAM)。

为了更加安全的做法,你将需要检讨我们的安全建议指南可以在这里对PubNub支持安全对我们的帮助台和知识库。

现在,我们已经在私人渠道建立,安全的通信将通过发送,并通过您的私人服务器接收聊天(能提供权威),以允许将消息在每个用户的基础上传递成为可能。 你可以学习如何通过阅读的这一部分要做到这一点从服务器到一个Socket IO客户端发送事件上PubNub文档。

第二个渠道是公共所有的房间聊天。 对于多选项卡支持您将简单地通过经由io.connect()方法中添加新的房间使用插座IO上PubNub的信道复用功能。 每次打开一个新的标签页时,你会打开通过io.connect(),其中可以有无限的新的命名空间。 但是请注意,你应该只在一次连接到不超过2个PubNub通道(这你已经在你的问题说明)。

这里是PubNub插座IO方法订阅多个提要和类别:

Socket.IO文档

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

Socket.IO视频在Vimeo

http://vimeo.com/34496366

例如Socket.IO多路复用码

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

作为一个快速的结论,您将使用安全的方法来建立一个私人“ME”通道发送/在每个用户的基础上获得的消息。 和公开“聊天”频道是推动所有的公共聊天室数据。 复用将成为公共聊天很重要的。



Answer 2:

以上这些问题的答案是正确的,2012年,但此后发生了很多变化。 私人聊天室可以PubNub访问管理器,其中明确授予发布/订阅特定的渠道访问启用。

这种工作方式是通过访问令牌(又名一个“验证密钥”)。 开发者(你)创建一个验证密钥(字符基本上所有字符串),并把它传递给PubNub访问管理器。 然后,设置该验证密钥的规则(即哪些渠道的验证密钥可以发布和/或订阅)。

此验证密钥被提供给需要该信道接入的任何设备,并且当所述设备订阅或发布到信道使用。

基本的文档都可以在这里: 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
 });


Answer 3:

要添加到以前的答案,我不知道这是否只是我盗号的东西,但为了使当前插座IO库多通道连接,你需要设置io.connected = FALSE; 之前通过在另一个通道中配置对象。

例如:

var pubnub_setup = {
  channel       : 'public_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

var private_setup = {
  channel       : 'private_channel',
  publish_key   : 'demo',
  subscribe_key : 'demo'
};

// Make your public socket connections
var publicSocket = io.connect( 'http://pubsub.pubnub.com/pub_socket', pubnub_setup );
var anotherPublicSocket = io.connect( 'http://pubsub.pubnub.com/another_pub_socket', pubnub_setup);

// Set false otherwise you keep getting back the previous created socket which is
// bound to the original channel 'public_channel'
io.connected = false;
var secretSocket = io.connect( 'http://pubsub.pubnub.com/secret_mulitplex_socket_namespace', private_setup );

现在,您可以继续创建的私人频道新密插槽。



文章来源: PubNub best practice: How to manage private rooms?