Publikuj wiadomość PubNub między dwoma kanałami prywatnymi

Używam Php i MySQL.

Po prostu zapisałem się do API push pubnub i pomyślnie dokonałem pierwszego powiadomienia push za pomocą API PHP Push dostarczonego przez Pubnub. Jestem nowy w tej technologii czasu rzeczywistego, więc wymyśliłem kilka pytań, które uważam za mylące, aby zrozumieć siebie. Sprawdziłem wiele razy i przeszukałem cały stackoverflow. Nie otrzymałem żadnych istotnych sugestii ani pytań w innym miejscu, więc piszę tutaj moje pytanie, szukając porady i pomocy w zakresie wiedzy specjalistycznej.

Pubnub mówi, że nie jest dobrze tworzyć więcej niż dwa kanały na klienta. Tak więc w mojej aplikacji muszę stworzyć więcej niż dwa kanały, aby słuchać powiadomień, które mają miejsce wszędzie na mojej stronie, ale pójdę z dwoma kanałami dla każdego zalogowanego użytkownika, jak sugerował Pubnub.

Zalogowani użytkownicy słuchają kanału 1-publicznego
Zalogowani użytkownicy słuchają prywatnych użytkownikówOnnDynamic-Channel, aby otrzymywać powiadomienia związane i przeznaczone tylko dla niego.

FYI:Ten link w PubNub mówi o tworzeniu nazw LongChannel, aby uniknąć Channel Snooping

Moje pytania są podane poniżej:
A. Czy zawsze muszę tworzyć nową prywatną nazwę kanału dynamicznego za każdym razem, gdy loguję się na stronie. Jeśli tak, to w jaki sposób inni użytkownicy wiedzą, jak wysłać powiadomienie do mojego prywatnego kanału. Czy po prostu muszę mieć tylko jedną nazwę kanału statycznego przechowywaną w tabeli bazy danych, aby inni uwierzytelnieni użytkownicy wysyłali zapytania do tabeli i otrzymywali mój prywatny kanał nazwa, aby wysłać mi powiadomienia. Jeśli tak jest, nie sądzisz, że jeśli haker zdobędzie jakąś prywatną nazwę kanału niektórych użytkowników, będzie mógł słuchać tego kanału?

B. Używam PHP i MySQL, więc nadal nie mogę wymyślić sposobu lub wymyślić rozwiązania do wysyłania wiadomości do prywatnych kanałów innego użytkownika.
Weźmy przykład prostego systemu zapytań o przyjaciela.
- UserA wysyła prośbę znajomego do użytkownika UserB.
- UserB słucha własnej nazwy dynamicznego kanału prywatnego o nazwie DynamicPrivateChannelB
(w jaki sposób UserA znajdzie nazwę kanału dla UserB, która jest prywatna? Myślę, że jedynym sposobem na to jest to, że prywatny kanał UserB powinien być przechowywany w tabeli bazy danych dla każdego zalogowanego użytkownika do zapytania. Czy myślę we właściwy sposób?)

<?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. Jeśli zawsze generujemy dynamiczne nazwy prywatnych kanałów, przechowując je w tabeli bazy danych, aktualizując je, gdy generowane są nowe dynamiczne nazwy kanałów. Myślę, że spowoduje to problem, ponieważ niektóre wiadomości nie zostaną dostarczone, ponieważ nowe dynamiczne nazwy prywatnych kanałów zastępują stare.

D. Mam więc wiele powiadomień wysyłanych do jednego kanału, takich jak Nowa wiadomość o przyjaciołach, Nowa wiadomość prywatna, Nowe prośby o prezenty i wiele innych podobnych. Jak wysłać wszystkie te dane do kanału i dowiedzieć się, jak analizować przychodzące nowe dane powiadomień. Wiem, że JSON jest formatem do wysłania, ale nie jestem pewien formatu wysyłania.

Wedługten link, pojedynczy kanał Pubnub może zawierać tylko do 100 wiadomości. Czy to oznacza, że ​​jeśli 200 wiadomości pojawi się jednocześnie na jednym kanale, pierwsze 100 zostanie dostarczone, a pozostałe będą w kolejce? Co powiesz na to, że 10 000 wiadomości przychodzi jednocześnie do jednego kanału? Czy wszystkie pozostałe wiadomości pozostają w kolejce? jeśli tak, w jaki sposób zostanie dostarczony do abonenta w czasie rzeczywistym?

Podam inny prosty scenariusz, który próbuję osiągnąć.

UserA jest uwierzytelniony i zalogowany na stronie.
UserA generuje własną nazwę kanału dynamicznego,UserAx732dsw3efsdfsdfsdf
UserA zaczyna słuchać swojego nowo utworzonego kanałuUserAx732dsw3efsdfsdfsdf
(Teraz użytkownik A powinien zacząć otrzymywać wiadomości od innych)


- UserB wysyła prywatną wiadomość doużytkownikA.
(Teraz tylko użytkownik A powinien zostać powiadomiony na swoim prywatnym kanale o nowej prywatnej wiadomości, jak to możliweużytkownikB alboSystem znajdź nazwę kanałuUserAx732dsw3efsdfsdfsdf ponieważ jest to kanał prywatny generowany dynamicznie przezużytkownikA , aniSystem lubużytkownikB ma dostęp do niego. To samo dzieje się zużytkownikB również, jeśliużytkownikB powinien zostać powiadomiony przez inny podmiot lub przez system, powinien istnieć sposób na znalezienie dynamicznej nazwy kanałuużytkownikB .

Innym problemem jest ten scenariusz, że jeśli użytkownik dynamicznie generuje nazwę kanału za każdym razem, gdy logował się na stronie. Co stanie się ze wszystkimi wiadomościami wysłanymi do kanału dynamicznego? Czy pubnub zapisuje wszystkie utworzone nazwy kanałów na swoim serwerze? Czy jest jakiś sposób, aby system lub użytkownik mógł dowiedzieć się, czy nazwa kanału jest nadal własna i przynajmniej jeden użytkownik słucha kanału?

Jestem ciekawy tego z powodu następujących pojęć, które mam:

UserA tworzydynamicChannelA kiedy zalogował się na stronie pod adresem1AM.
UserA zaczyna otrzymywać wiele powiadomień na swój dynamiczny kanałdynamicChannelA
Teraz,UserA wylogowuje się ze strony internetowej pod adresem1:30, co stanie się z wieloma innymi użytkownikami, którzy wciąż przesyłają powiadomienia do niegodynamicChannelA ponieważ następnym razemUserA loguje się na stronie,UserA będzie słuchał innej dynamicznej nazwy kanału.UserA nie będzie słuchał swojego poprzedniego kanałudynamicChannelA .


Myślę o użyciu metody pobierania nazwy kanału konkretnego użytkownika z tabeli bazy danych. Czy jest jakaś metoda lub sposób zapobiegania nieautoryzowanej subskrypcji kanału? Ponieważ każdy może subskrybować nazwę kanału, jeśli ma klucz subskrypcji i nazwę kanału, niezależnie od długości nazwy kanału. Jestem po prostu ciekawy, ponieważ cała subskrypcja dzieje się po stronie klienta, a klucz subskrypcji i nazwy kanałów są widoczne.

questionAnswers(1)

yourAnswerToTheQuestion