-->

PubNub两个专用通道之间发布消息(PubNub publish message between

2019-06-25 01:49发布

我使用PHP和MySQL。

我刚刚注册以pubnub推送API,并成功地利用Pubnub提供的PHP推式API使我第一次推送通知。 我是新进入这个实时的技术,所以我想出了一些问题,我觉得这混乱的了解自己。 我用Google搜索了很多次,找遍了计算器。 我没有得到任何相关的建议或疑问别的地方,所以我在这里写下我的问题寻求您的建议和专业知识的帮助。

Pubnub说,这是不是创造每个客户端超过两个通道是好事。 所以,在我的申请,我有一个要求,以创建两个以上的渠道来听通知我的网站上到处发生,但我会用两个通道每个登录用户为Pubnub建议去。

  1. 登录的用户监听通道1,公共
  2. 登录的用户监听私人UsersOwnDynamic通道接收相关的,只意味着他的通知。

FYI: 在PubNub此链接说,有关创建LongChannel名,以避免通道侦听

我的问题给出如下:
答:我总是要创建一个新的私人动态信道的名字,每次我登录到该网站。 如果是这样,怎么会其他用户知道如何将通知发送到我的私人Channel.Or,做我只需要只有一个静态的频道名称存储在数据库表中,以便其他身份验证的用户将查询表,并让我的私人频道name要送我的通知。 如果是这样的话,你不觉得如果黑客获得某些用户的一些私人频道名称的时候,就可以收听到该通道?

B.I'm使用PHP和MySQL,所以我现在还不能想出一个办法或者拿出一个解决方案,发送消息给其他用户的私人频道。
让我们举一个例子一个简单的好友请求系统。
- 用户A发送一个朋友请求用户B。
- 用户B是听叫DynamicPrivateChannelB自己的动态专用通道名称
(如何将用户A找到用户B通道名这是私人?即时通讯思想的唯一办法。这就是用户B的专用通道应存放在一个数据库表中的每一个的loggedIn用户查询。我在想以正确的方式?)

<?php 

    //first way. How can i possibly achieve this.
    $sqlquery = "sent friend request from userA to userB"; 
    require('Pubnub.php'); 
    $pubnub = new Pubnub( 'pubkey', 'subkey' );
    $pubnub->publish( array(
        'channel' => 'how do i find the private channel name for userB to sent this notification?', 
                    'message' => array('friend_request' => 'A friend request') ) 
                    );

  //2nd way ? Is this the right way ?
    $sqlquery = "sent friend request from userA to userB"; 
    $privatechannelofuserB = "get the channel name of userB from the db table";
    require('Pubnub.php'); 
    $pubnub = new Pubnub( 'pubkey', 'subkey' );
    $pubnub->publish( array(
        'channel' => '$privatechannelofuserB', 
                    'message' => array('friend_request' => 'A friend request') ) 
                    );
?>

C.如果我们总是生成动态的私人频道名称,存储在数据库中的表,每当产生新的动态频道名称更新。 我认为这将导致一个问题,因为某些消息不会递送新的充满活力的私营频道名称取代旧的。

D.所以,我有很多的通知发送到像交友请求,新的私人信息回复,新礼品请求和许多其他类似的单信道。 我如何发送的所有这些数据信道,以及如何发现和解析传入的新通知的数据。 我知道JSON是发送但林不知道有关发送格式的格式。

根据此链路中,单个信道Pubnub只能包含多达100个消息。 这是否意味着,如果200点的消息来一次的前100位被交付单通道,其余是队列? 怎么样,如果10,000条消息来自于一次单一的通道? 是否所有剩余的消息停留在队列中? 如果是这样,它是如何被传递到实时的用户?

让我给,我试图实现另一个简单的场景。

  • 用户A通过认证,并登录到该网站。
  • 用户A生成自己的动态信道名称,UserAx732dsw3efsdfsdfsdf
  • 用户A开始听他新创建的通道UserAx732dsw3efsdfsdfsdf
    (现在,用户A应该从别人接收消息)


- 用户B发送悄悄话给用户A。
(现在,只有用户A应该得到他关于新悄悄话专用通道通知,怎么能用户B120系统找出路名UserAx732dsw3efsdfsdfsdf因为,这是一个专用通道由用户A的动态生成的,无论是系统用户B已经进入到它,同样的事情也发生了用户B为好,如果用户B应该由任何其他实体或由系统再次得到通知,应该找出用户B的动态信道名称的方式。

另一个问题是,这种情况是,如果用户动态生成的频道名称,每次他/她登录到该网站。 会发生什么事,以所有被送到动态信道的消息? 做pubnub节省了他们所有的服务器上创建的频道名称? 有没有什么办法,一个系统或用户可以找出一个频道名称是否还是被自己和ATLEAST一个用户被监听信道?。

我很好奇,想知道是因为以下概念,我有这样的:

  • 用户A创建dynamicChannelA当他/她登录到该网站在凌晨1点
  • 用户A开始获得大量通知pushout到他的动态信道dynamicChannelA
  • 现在, 用户A从网站在上午1:30,会因为当用户A登录到网站下一次发生在谁仍然推出通知他dynamicChannelA许多其他用户什么注销, 用户A将被倾听不同的动态频道名称。 用户A将不能听他的上一个频道dynamicChannelA。


我想用从数据库中检索表中特定用户的频道名称的方法。 有没有什么方法或办法,以防止通道的未经授权的订阅? 因为任何人都可以订阅频道名称,如果他们都不管通道名称有多长订阅键和频道名称。 我只是好奇,因为所有订阅的客户端发生,而认购键和频道名称是可见的。

Answer 1:

有解决你碰到的问题没有一个单一的方法。 我们的客户已经使用了多种设计模式来对付他们。 我自己就碰到这种类型的事情建筑PubNub应用程序,我会帮助你就像我可以。

Pubnub说,它不是一件好事创建每个客户端超过两个通道。 所以,在我的申请,我有一个要求,创建两个以上的渠道来听通知我的网站上到处发生,但我会用两个通道每个登录用户为Pubnub建议去。

登录的用户监听通道1公有制登录用户监听私人UsersOwnDynamic通道收到相关的通知,只意味着他。

这是做一个很好的方式,和路我们的许多大规模的客户做。 全局通道和一个私人的,用户唯一通道。

一个。

我总是要创建一个新的私人动态信道的名字,每次我登录到该网站。

不一定,虽然这是一个很好的方式。 您可以使用PUBNUB.uuid()在JavaScript的客户端来做到这一点。 或者,使用PHP生成它的服务器端,并呈现给客户端。 也许你可以把它设置为一个cookie,因此客户端始终可以访问它。

如果是这样,怎么会其他用户知道如何将通知发送到我的私人频道。

他们能得到的ID从PHP服务器; 无论是通过全球渠道或用户自己的专用通道,他们正在听。

或者,我只是需要有存储在数据库表中只有一个静态信道的名字,让其他身份验证的用户将查询表,并让我的私人频道的名字给我发送的通知。

你可以这样来做了。 您可能具有全球渠道的用户可以发送到不同则全球渠道他们听。 只有服务器有一个订阅密钥。 因此,身份验证的用户将消息发送到告诉它:“我需要相应的用户密钥”,然后在服务器做了查询,并回到用户专用通道发送邮件的服务器。

如果是这样的话,你不觉得如果黑客获得某些用户的一些私人频道名称的时候,就可以收听到该通道?

如果您保留在全局发送通道订阅关键,只有服务器可以看到该通道上喋喋不休。

B.

即时通讯使用PHP和MySQL,所以我还不能想出一个办法或者拿出一个解决方案,发送消息给其他用户的私人频道。 让我们举一个例子一个简单的好友请求系统。 - 用户A发送一个朋友请求用户B。 - 用户B是听叫DynamicPrivateChannelB自己充满活力的私营频道名称(如何将用户A找到用户B通道名称是私人即时通讯思想的唯一办法。这就是用户B的专用通道应存放在一个数据库表中的每一个?的loggedIn用户查询。我在想以正确的方式?)

这非常类似于以前的问题。 有没有人做到这一点的方式,但我上面列出的设计模式应该工作。 总括来说这种设计模式:

服务器端

  • 监听用户的消息全局用户发送通道。 该服务器是有这个认购键的唯一实体
  • 可以查询数据库获取用户ID,然后发送到各种IDS随意
  • 还可以发送关于全球用户 - 接收通道,其所有客户端侦听。 该服务器是具有本公布关键的唯一实体。

客户端

  • 上侦听全球用户 - 接收通道。 这是如何获得质量服务器广播。 不能在此通道上发送(只有订阅键)
  • 发送有关全局用户发送信道服务器的消息。 不能在此通道上收到(只公布键)
  • 侦听私人用户信道。 这就是用户获得私人信息。 它也可以使用此客户端与客户端的通信。
  • 通过附加存储服务器上的一个私人,每个用户的密钥的所有私人信息防止滥用,初始页面加载时提供。 这样一来,客户知道如果邮件声称是来自服务器是合法的。

C。

如果我们总是生成动态的私人频道名称,存储在数据库中的表,每当产生新的动态频道名称更新。 我认为这将导致一个问题,因为某些消息不会递送新的充满活力的私营频道名称取代旧的。

如果你细心的话,当你产生新的频道名称,这不应该是一个问题。 请记住,客户端可以总是说在全球-用户发送通道“嘿,我在这里! 这是我的身份证。 让我了解”。 我通常设计我的应用程序,以便客户自动喊出了这一点,每30秒左右。

D.

所以,我有很多的通知发送到像交友请求,新的私人信息回复,新礼品请求和许多其他类似的单信道。 我如何发送的所有这些数据信道,以及如何发现和解析传入的新通知的数据。 我知道JSON是发送但林不知道有关发送格式的格式。

JSON是良好的发送和recieving。 我这样做的方法是有一个所谓的“名”,它定义它是什么类型的消息的属性。 例如:

{
    "id"   : "blah_blah_unique_id",    // sender_client_id 
    "name" : "friend_request",         // type of message
    "data" : {                         // the data itself
               "requested_friend_id" : "blah_blah_some_other_unique_id" 
             }
}

实际上,你可以使用任何你想要的格式,但我们会在JSON把它包(通常,这意味着刚刚结束在引号)后,能够通过PubNub推。

希望这可以帮助!

新问题

根据此链路中,单个信道Pubnub只能包含高达100个消息。 这是否意味着,如果200点的消息来一次的前100位被交付单通道,其余是队列? 怎么样,如果10,000条消息来自于一次单一的通道? 是否所有剩余的消息停留在队列中? 如果是这样,它是如何被传递到实时的用户?

该100消息限制是在问候PubNub.history。 如果有人认购,200条短信进来,他们将收到的所有200条消息。

(现在,只有用户A应该得到他关于新悄悄话专用通道通知,怎么能用户B120或系统找出路名UserAx732dsw3efsdfsdfsdf因为,这是一个专用通道由用户A的动态生成的,无论是系统或用户B已经进入到它,同样的事情也发生了用户B为好,如果用户B应该由任何其他实体或由系统再次得到通知,应该找出用户B的动态信道名称的方式。

有没有一个放之四海而皆准的解决办法对这个问题,但我希望做的是在服务器上生成页面加载的独特ID,并将其呈现在客户端上您最初的HTTP请求。

另一个问题是,这种情况是,如果用户动态生成的频道名称,每次他/她登录到该网站。 会发生什么事,以所有被送到动态信道的消息? 做pubnub节省了他们所有的服务器上创建的频道名称?

你不必动态生成的每一次。 你可以....但您还可以设置一个cookie与唯一的ID,或从数据库中把它和它呈现在网页加载客户端(也就是我想要做的)。 我们不保存频道名称。

有没有什么办法,一个系统或用户可以找出一个频道名称是否还是被自己和ATLEAST一个用户被监听信道?。

未开箱的,但你可以很容易地实现这一点。 只要有你的服务器发送一个ping和建立你的客户,如果他们正在收听的是始终响应ping。

现在,用户A从网站在上午1:30,会因为当用户A登录到网站下一次发生在谁仍然推出通知他dynamicChannelA许多其他用户什么注销,用户A将被倾听不同的动态通道name.UserA不会听他的上一个频道dynamicChannelA。

你可以防止这种情况的方法是定期(每30秒?)从服务器,谁可以跟踪用户是否仍然存在坪。 在接下来的几个月,我们将推出一个存在API自动做到这一点,顺便说一句。

林思使用从数据库中检索表中特定用户的信道名称的方法。 有没有什么方法或办法,以防止通道的未经授权的订阅? 因为任何人都可以订阅频道名称,如果他们都不管通道名称有多长订阅键和频道名称。 我只是好奇,因为所有订阅的客户端发生,而认购键和频道名称是可见

主要方式的战略预扣税发布/订阅键。 你说得对,任何人只要有适当的细节可以收听 - 这是仅客户端系统的一个大问题。 暂且,你就必须拿出创造性的办法来解决它。



文章来源: PubNub publish message between two Private Channels
标签: pubnub