Я использую Php и MySQL.
Я только что зарегистрировался в push-API pubnub и успешно отправил свое первое push-уведомление с помощью PHP Push API, предоставляемого Pubnub. Я новичок в этой технологии реального времени, поэтому у меня возникли некоторые вопросы, которые я сбиваю с толку, чтобы понять себя. Я много раз гуглил и искал по всему stackoverflow. Я не получил никаких соответствующих предложений или вопросов в другом месте, поэтому я записываю свой вопрос здесь, чтобы получить ваш совет и экспертную помощь.
В Pubnub говорят, что создавать более двух каналов на одного клиента не очень хорошо. Итак, в моем приложении у меня есть требование создать более двух каналов для прослушивания уведомлений, происходящих повсюду на моем веб-сайте, но я буду использовать два канала для каждого вошедшего в систему пользователя, как предложил Pubnub.
К вашему сведению: Эта ссылка в 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.
Я думаю использовать метод получения имени канала конкретного пользователя из таблицы базы данных. Есть ли какой-либо метод или способ предотвратить несанкционированную подписку на канал? Потому что любой может подписаться на имя канала, если у него есть ключ подписки и имя канала, независимо от длины названия канала. Мне просто любопытно, потому что вся подписка происходит на стороне клиента, и видны ключ подписки и имена каналов.