我正在使用Php和MySQL。
我刚注册了Pubnub推送API,成功地使用Pubnub提供的PHP Push API发送了第一条推送通知。我对这种实时技术还很陌生,所以我有一些问题让我自己感到困惑。我已经搜索了很多次并在stackoverflow上搜索了所有内容。我没有得到任何相关的建议或其他问题,所以我在这里写下我的问题,寻求您的意见和专业知识帮助。
Pubnub说每个客户端不应创建超过两个频道。因此,在我的应用程序中,我需要创建更多的频道来监听网站上发生的通知,但是我将按照Pubnub的建议为每个登录用户使用两个频道。
- Logged in users listens to Channel1-Public
- Logged in users listens to private UsersOwnDynamic-Channel to receive notifications related and only meant for him.
FYI: 该链接在PubNub中说长通道名称可以避免频道窃听
我的问题如下:
A.我是否总是需要在登录网站时创建新的私有动态频道名称?如果是这样,其他用户如何知道如何向我的私有频道发送通知?或者,我只需要在数据库表中存储一个静态频道名称,这样其他已认证的用户将查询该表并获取我的私有频道名称以向我发送通知。如果是这种情况,您不认为如果黑客掌握了某些用户的某些私有频道名称,他们将能够收听该频道吗?
B.我正在使用PHP和MySQL,因此仍然无法想出一种方法或想出解决方案,以便向另一个用户的私有频道发送消息。
让我们以简单的好友请求系统为例。
-UserA向UserB发送好友请求。
-UserB正在监听自己的动态私人频道名称DynamicPrivateChannelB
(UserA如何找到UserB的私人频道名称?我认为这唯一的方法是将UserB的私人频道存储在数据库表中,以供每个登录的用户进行查询。我是否想得对?)
<?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条消息发送到单个频道,剩下的所有消息都留在队列中吗?如果是这样,它们如何即时地传递给订阅者呢?
让我给出另一个我正在尝试实现的简单场景。
- UserA已通过身份验证并登录到网站。
- UserA生成了自己的动态频道名称,UserAx732dsw3efsdfsdfsdf。
- UserA开始监听他新创建的频道UserAx732dsw3efsdfsdfsdf。
(现在,userA应开始收到来自其他人的消息)
- UserB向userA发送私人消息。
(现在,只有用户A应该在他的私人频道上收到关于新私人消息的通知,但是,UserB或System如何找到频道名称UserAx732dsw3efsdfsdfsdf,因为这是userA动态生成的私有频道,系统或userB都没有访问它。如果任何其他实体或系统再次通知userB,同样的事情也正在发生,必须有一种方法找到userB的动态频道名。另一个问题是,如果用户每次登录网站时都会动态生成频道名称,那么所有发送到动态频道的消息会发生什么?Pubnub是否保存了所有创建的频道名称到其服务器上?系统或用户是否有办法找出频道名称是否仍在使用,并且至少有一个用户正在监听该频道?
我想了解这个问题,因为我有以下概念:
- UserA在1AM登录网站时创建了dynamicChannelA。
- UserA开始接收大量的通知推送到他的动态频道dynamicChannelA。
- 现在,在1:30 AM,UserA从网站注销,那么仍然向他的dynamicChannelA发送通知的许多其他用户会发生什么,因为下一次当UserA登录网站时,UserA将听取不同的动态频道名称。 UserA将不会听他以前的频道dynamicChannelA。
我正在考虑使用从数据库表中检索特定用户频道名称的方法。是否有任何方法或方式可以防止未经授权的订阅?因为无论频道名称多长,只要有订阅键和频道名称,任何人都可以订阅频道