PubNub публикует сообщение между двумя приватными каналами

Я использую Php и MySQL.

Я только что зарегистрировался в push-API pubnub и успешно отправил свое первое push-уведомление с помощью PHP Push API, предоставляемого Pubnub. Я новичок в этой технологии реального времени, поэтому у меня возникли некоторые вопросы, которые я сбиваю с толку, чтобы понять себя. Я много раз гуглил и искал по всему stackoverflow. Я не получил никаких соответствующих предложений или вопросов в другом месте, поэтому я записываю свой вопрос здесь, чтобы получить ваш совет и экспертную помощь.

В Pubnub говорят, что создавать более двух каналов на одного клиента не очень хорошо. Итак, в моем приложении у меня есть требование создать более двух каналов для прослушивания уведомлений, происходящих повсюду на моем веб-сайте, но я буду использовать два канала для каждого вошедшего в систему пользователя, как предложил Pubnub.

  1. Вошедшие в систему пользователи слушают Channel1-Public
  2. Вошедшие в систему пользователи слушают частный UsersOwnDynamic-Channel, чтобы получать уведомления, связанные и предназначенные только для него.

К вашему сведению: Эта ссылка в PubNub говорит о создании имен LongChannel, чтобы избежать отслеживания канала

Мои вопросы приведены ниже:
О. Нужно ли мне всегда создавать новое имя частного динамического канала каждый раз, когда я захожу на веб-сайт? Если да, то как другие пользователи узнают, как отправить уведомление на мой частный канал.Или мне просто нужно иметь только одно имя статического канала, хранящееся в таблице базы данных, чтобы другие аутентифицированные пользователи запрашивали таблицу и получали имя моего частного канала для отправки мне уведомлений. Если это так, не думаете ли вы, что если хакер получит имя какого-то частного канала определенных пользователей, они смогут прослушать этот канал?

B. Я использую PHP и MySQL, поэтому до сих пор не могу придумать способ или придумать решение для отправки сообщения в приватные каналы другого пользователя.
Давайте возьмем пример простой системы запросов на добавление в друзья.
- Пользователь А отправляет запрос на добавление в друзья пользователю Б.
- Пользователь B прослушивает свое собственное имя динамического частного канала с именем DynamicPrivateChannelB
. (как UserA найдет имя канала для UserB, которое является частным? Я думаю, что единственный способ для этого состоит в том, что частный канал UserB должен храниться в таблице базы данных для каждого пользователя, вошедшего в систему, для запроса. Правильно ли я думаю?)

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аутентифицирован и зарегистрирован на веб-сайте.
  • UserAсоздает свое собственное имя динамического канала, UserAx732dsw3efsdfsdfsdf
  • UserAначинает слушать свой только что созданный канал UserAx732dsw3efsdfsdfsdf
    (Теперь пользователь A должен начать получать сообщения от других)


- Пользователь Bотправляет личное сообщение пользователю A.
(Теперь только пользователь А должен получать уведомления на своем приватном канале о новом приватном сообщение, как userBили Systemузнать канал имя UserAx732dsw3efsdfsdfsdf, потому что это частный канал генерируется динамически userA, ни System, ни пользователь Bполучил к нему доступ. То же самое происходит и с userB. Если userBдолжен быть снова уведомлен каким-либо другим объектом или системой, должен быть способ узнать динамику имя канала userB.

Другая проблема заключается в том, что этот сценарий заключается в том, что пользователь динамически генерирует имя канала каждый раз, когда он/она входит в систему на веб-сайте. Что произойдет со всеми сообщениями, отправленными в динамический канал? Сохраняет ли pubnub названия всех созданных каналов на своем сервере?Есть ли способ, которым система или пользователь могут узнать, является ли имя канала все еще принадлежащим и хотя бы один пользователь слушает канал?

Мне любопытно узнать это из-за следующих концепций, которые у меня есть:

  • UserAсоздает dynamicChannelA, когда он/она заходит на веб-сайт в 1AM. ].
  • Пользователь А начинает получать много уведомлений на свой динамический канал dynamicChannelA
  • Теперь Пользователь Авыходит из веб-сайта в 1:30 , что произойдет многим другим пользователям, которые все еще рассылают уведомления своему dynamicChannelA, потому что в следующий раз, когда UserA заходит на сайт, UserAбудет слушать разные динамическое имя канала. Пользователь Aне будет слушать свой предыдущий канал dynamicChannelA.


Я думаю использовать метод получения имени канала конкретного пользователя из таблицы базы данных. Есть ли какой-либо метод или способ предотвратить несанкционированную подписку на канал? Потому что любой может подписаться на имя канала, если у него есть ключ подписки и имя канала, независимо от длины названия канала. Мне просто любопытно, потому что вся подписка происходит на стороне клиента, и видны ключ подписки и имена каналов.

18
задан ROMANIA_engineer 29 July 2017 в 20:45
поделиться

0 ответов

Другие вопросы по тегам:

Похожие вопросы: