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



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

默认情况下,任何人都可以收听频道。订阅和发布它很容易。

我想要的是一个主要的公共房间(到目前为止还不错(,但任何人也应该能够与其他任何人私下交谈,而不会有被其他用户阅读的风险。

这些动态房间将被选项卡化,用户应该能够从一个房间转到另一个房间。

另一个

要求是,与某人私下交谈不会将您踢出您订阅的其他房间(聊天时您仍然可以收到新消息已在另一个房间发布的通知(

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

  • 我会使用不同的频道(动态创建(吗?
  • 我会使用一个频道并根据消息的状态、伪房间 ID 或主角过滤消息吗?
  • 我会使用多路复用(仅一个套接字(吗?

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

谢谢。

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

PPS:我用朋布和 socket.io

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

您正在寻求一种创建多房间聊天服务的方法,可能类似于IRC客户端,您可以在其中加入并坐在多个聊天室(例如 freenode.net 上(。 这是可能的,并且需要一些特殊的任务才能正确完成。

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

YTQyOGFiNWEtNTZmZC00OGVhLTgxZjktMWE3ZmMyMzc3MTRhCg==

这类似于用户的引用 ID。 此ID可用于私人1对1聊天,另一个房间可用于群聊。 您将使用访问控制管理(我们称为 PubNub 访问管理器 (PAM((来保护此群聊。

有关其他安全实践,您需要查看我们的帮助台和知识库上的 PubNub 安全支持上的安全建议指南。

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

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

以下是订阅多个源和类别的 PubNub 套接字 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"通道,以基于每个用户发送/接收消息。 还有一个公共"聊天"频道,推送所有公共聊天室数据。 多路复用对于公共聊天很重要。

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

其工作方式是通过访问令牌(也称为"身份验证密钥"(。 开发人员(您(创建一个身份验证密钥(基本上是任何字符串(并将其传递给 PubNub 访问管理器。 然后,您可以为此身份验证密钥设置规则(即身份验证密钥可以发布和/或订阅哪些通道(。

此身份验证密钥提供给需要访问通道的任何设备,并在设备订阅或发布到通道时使用。

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

授予 60 分钟的读/写权限,将"私人聊天"引导到auth_key:

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

为了补充上一个答案,我不确定这是否只是我破解了东西,但为了与当前的套接字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 );

现在,您可以继续在专用频道上创建新的秘密套接字。

最新更新