Я использую Php и MySQL.
Я только что подписался на API push-уведомлений pubnub и успешно сделал свое первое push-уведомление, используя API-интерфейс PHP Push, предоставляемый Pubnub. Я новичок в этой технологии реального времени, поэтому у меня возникли некоторые вопросы, которые мне сложно понять. Я много раз гуглил и искал во всем стеке. Я не получал никаких соответствующих предложений или вопросов где-либо еще, поэтому я записываю свой вопрос здесь, чтобы получить ваш совет и помощь экспертов.
Pubnub говорит, что создавать более двух каналов на одного клиента - не лучший вариант. Итак, в моем приложении у меня есть требование создать более двух каналов для прослушивания уведомлений, происходящих повсюду на моем веб-сайте, но я выберу два канала для каждого зарегистрированного пользователя, как предлагал Pubnub.
- Зарегистрированные пользователи слушают Channel1-Public
- Зарегистрированные пользователи слушают частный канал UsersOwnDynamic, чтобы получать уведомления, связанные и предназначенные только для него.
К вашему сведению: Эта ссылка в PubNub говорит о создании имен LongChannel, чтобы избежать отслеживания каналов
Мои вопросы приведены ниже:
A. Всегда ли мне нужно создавать новое частное имя динамического канала каждый раз, когда я захожу на сайт. Если да, то как другие пользователи узнают, как отправить уведомление на мой частный канал? Или мне просто нужно иметь только одно статическое имя канала, хранящееся в таблице базы данных, чтобы другие аутентифицированные пользователи запрашивали таблицу и получали мой частный канал имя для отправки мне уведомлений. Если это так, не думаете ли вы, что если хакер получит имя какого-то частного канала определенных пользователей, они смогут прослушать этот канал?
Б. Я использую PHP и MySQL, поэтому до сих пор не могу придумать способ или придумать решение для отправки сообщения на частные каналы другого пользователя.
Давайте рассмотрим пример простой системы запроса дружбы.
- Пользователь А отправляет пользователю Б запрос в друзья.
- 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 сообщений приходили на один канал? Все ли оставшиеся сообщения остаются в очереди? если да, то как он доставляется подписчику в реальном времени?
Позвольте мне предложить еще один простой сценарий, которого я пытаюсь достичь.
- Пользователь A аутентифицирован и вошел на сайт.
- UserA генерирует собственное имя динамического канала, UserAx732dsw3efsdfsdfsdf
- UserA начинает слушать свой недавно созданный канал UserAx732dsw3efsdfsdfsdf
(теперь userA должен начать получать сообщения от других)
- UserB отправляет личное сообщение пользователю userA.
(Теперь только пользователь A должен получать уведомления на своем частном канале о новом личном сообщении, как пользователь B или Система может узнать имя канала UserAx732dsw3efsdfsdfsdf, потому что это частный канал, динамически генерируемый userA, и ни System, ни userB не имеют к нему доступа. То же самое что-то происходит и с пользователемB, если userB должен быть снова уведомлен каким-либо другим лицом или системой, должен быть способ узнать имя динамического канала userB.
Другая проблема заключается в том, что в этом сценарии пользователь динамически генерирует имя канала каждый раз, когда он / она входит на сайт. Что произойдет со всеми сообщениями который был отправлен в динамический канал? Сохраняет ли pubnub все созданные имена каналов на своем сервере? Есть ли способ, которым система или пользователь могут узнать, Имя nnel все еще принадлежит и хотя бы один пользователь слушает канал?.
Мне любопытно это узнать, потому что у меня есть следующие концепции:
- UserA создает dynamicChannelA при входе на веб-сайт в 1:00.
- UserA начинает получать много уведомлений на его динамический канал dynamicChannelA
- Теперь UserA выходит с веб-сайта в 1:30 AM, что произойдет со многими другими пользователями, которые все еще отправляют уведомление на его dynamicChannelA strong>, потому что к следующему разу, когда UserA войдет на сайт, UserA будет прослушивать другое имя динамического канала. UserA не будет слушает его предыдущий канал dynamicChannelA.
Я думаю использовать метод получения имени канала конкретного пользователя из таблицы базы данных. Есть ли способ или способ предотвратить несанкционированную подписку на канал? Потому что любой может подписаться на имя канала, если у него есть ключ подписки и имя канала, независимо от длины имени канала. Мне просто любопытно, потому что вся подписка происходит на стороне клиента, и ключ подписки и названия каналов видны.