PubNub publicar mensagem entre dois canais privados

Eu estou usando o PHP e MySQL.

Eu acabei de me inscrever para a API push do pubnub e fiz com sucesso minha primeira notificação por push usando o PHP Push API fornecido pelo Pubnub. Eu sou novo nessa tecnologia Realtime, então eu tenho algumas perguntas que acho confuso para me entender. Eu pesquisei muitas vezes e procurei por todo o stackoverflow. Eu não recebi nenhuma sugestão ou pergunta relevante em outro lugar, então estou escrevendo minha pergunta aqui buscando seu conselho e ajuda especializada.

Pubnub diz que não é bom criar mais de dois canais por cliente. Então, no meu aplicativo, eu tenho um requisito para criar mais de dois canais para ouvir notificações acontecendo em todos os lugares no meu site, mas eu vou com dois canais para cada usuário logado como Pubnub sugeriu.

Usuários conectados ouvem o Canal1-Público
Os usuários conectados ouvem o canal UsersOwnDynamic privado para receber notificações relacionadas e apenas para ele.

PARA SUA INFORMAÇÃO:Este link no PubNub diz sobre a criação de nomes LongChannel para evitar a espionagem do canal

Minhas perguntas são dadas abaixo:
A. Eu sempre tenho que criar um novo nome de canal dinâmico sempre que eu fizer login no site. Em caso afirmativo, como outros usuários saberiam como enviar uma notificação para meu canal privado? Ou preciso apenas ter um nome de canal estático armazenado na tabela de banco de dados, para que outros usuários autenticados consultem a tabela e obtenham meu canal privado nome para me enviar notificações. Se este for o caso, você não acha que, se um hacker se apossar de algum nome de canal privado de certos usuários, eles poderão ouvir esse canal?

B. Estou usando PHP e MySQL, então eu ainda não consigo pensar em uma maneira ou encontrar uma solução para enviar mensagens para canais privados de outro usuário.
Vamos dar um exemplo para um sistema simples de solicitação de amizade.
- UserA envia uma solicitação de amizade para o UserB.
- UserB está escutando seu próprio nome de canal privado dinâmico chamado DynamicPrivateChannelB
(como o UserA encontrará o nome do canal para o UserB que é privado? Estou pensando que a única maneira para isso é que o canal privado do UserB deve ser armazenado em uma tabela de banco de dados para cada usuário logado consultar. Estou pensando no caminho certo?)

<?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. Se estivermos sempre gerando nomes de canais privados dinâmicos, armazenando na tabela de banco de dados, atualizando sempre que novos nomes de canais dinâmicos forem gerados. Eu acho que isso causará um problema porque algumas mensagens não serão entregues quando novos nomes de canais privados dinâmicos substituírem os antigos.

D. Então, eu tenho muitas notificações para enviar para um único canal, como novas solicitações de amigos, novas respostas de mensagens privadas, novos pedidos de presentes e muitos outros assim. Como eu enviei todos esses dados para um canal e como descobrir e analisar os novos dados de notificações recebidos. Eu sei JSON é o formato para enviar, mas não tenho certeza sobre o formato de envio.

De acordo comesse link, um único canal Pubnub pode conter até 100 mensagens. Isso significa que, se 200 mensagens chegarem de uma só vez a um único canal, as primeiras 100 serão entregues e as restantes na fila? Que tal se 10.000 mensagens chegarem de uma só vez a um único canal? Todas as mensagens restantes permanecem na fila? se sim, como é entregue ao assinante em tempo real?

Deixe-me dar outro cenário simples que estou tentando alcançar.

UserA está autenticado e logado no site.
UserA gera seu próprio nome de canal dinâmico,UserAx732dsw3efsdfsdfsdf
UserA começa a ouvir seu canal recém-criadoUserAx732dsw3efsdfsdfsdf
(Agora, o userA deve começar a receber mensagens de outras pessoas)


- UserB envia uma mensagem privada parauserA.
(Agora, somente o usuário A deve ser notificado em seu canal privado sobre a nova mensagem privada, como podeuserB ou oSistema descubra o nome do canalUserAx732dsw3efsdfsdfsdf porque, este é um canal privado gerado dinamicamente poruserA nem oSistema ouuserB acessou a ele. Essa mesma coisa está acontecendouserB bem, seuserB deve ser notificado por qualquer outra entidade ou pelo sistema novamente, deve haver uma maneira de descobrir o nome do canal dinâmico deuserB .

Outra questão é este cenário é que, se um usuário está gerando dinamicamente o nome do canal toda vez que ele logou no site. O que acontecerá com todas as mensagens enviadas para o canal dinâmico? O pubnub salva todos os nomes de canais criados em seu servidor? Existe alguma maneira que um sistema ou um usuário possa descobrir se um nome de canal ainda está sendo próprio e pelo menos um usuário está ouvindo o canal?

Estou curioso para saber isso por causa dos seguintes conceitos que tenho:

UserA criadynamicChannelA quando ele logou no site em1:00.
UserA começa a receber muitos pushout de notificação para seu canal dinâmicodynamicChannelA
Agora,UserA faz logout do site em01:30, o que vai acontecer com os muitos outros usuários que ainda estão enviando uma notificação para suadynamicChannelA porque na próxima vez em queUserA registra no site,UserA estará ouvindo o nome do canal dinâmico diferente.UserA não vai ouvir seu canal anteriordynamicChannelA .


Estou pensando em usar o método de recuperar o nome do canal de um usuário específico da tabela do banco de dados. Existe algum método ou maneira de impedir a assinatura não autorizada do canal? Porque qualquer pessoa pode se inscrever no nome do canal se tiver a chave de assinatura e o nome do canal, não importando o tempo de duração do nome do canal. Estou apenas curioso porque todas as assinaturas estão acontecendo no lado do cliente e a chave de assinatura e os nomes de canais estão visíveis.

questionAnswers(1)

yourAnswerToTheQuestion