Я использую Php и MySQL.
Я только что зарегистрировался для pubnub push API и успешно сделал свое первое push-уведомление с помощью PHP Push API, предоставленного Pubnub. Я новичок в этой технологии Realtime, поэтому у меня возникли некоторые вопросы, которые я считаю непонятными для себя. Я много раз искал Google и искал весь стек. У меня не было никаких соответствующих предложений или вопросов в другом месте, поэтому я пишу свой вопрос здесь, пытаясь получить советы и помощь.
Pubnub говорит, что не очень хорошо создавать более двух каналов на одного клиента. Итак, в моем приложении у меня есть требование создать более двух каналов для прослушивания уведомлений, происходящих повсюду на моем веб-сайте, но я поеду с двумя каналами для каждого зарегистрированного пользователя, как предполагал Pubnub.
- Записанные пользователи прослушивают Channel1-Public
- Зарегистрированные пользователи прослушивают приватные UsersOwnDynamic-Channel для получения уведомлений, связанных и предназначенных только для него.
FYI: Эта ссылка в PubNub говорит о создании имен LongChannel, чтобы избежать Channel Snooping
Мои вопросы приводятся ниже:
A. Всегда ли мне приходится создавать новое имя частного динамического канала каждый раз, когда я заходил на сайт. Если да, то каким другим пользователям известно, как отправить уведомление на мой частный канал. Или просто нужно иметь только одно статическое имя канала, хранящееся в таблице базы данных, чтобы другие пользователи, прошедшие проверку подлинности, запрашивали таблицу и получали мой частный канал имя для отправки мне уведомлений. Если это так, разве вам не кажется, что если хакер получит какое-то имя частного канала для определенных пользователей, они смогут прослушать этот канал?
B. Я использую PHP и MySQL, поэтому я до сих пор не могу придумать способ или придумать решение для отправки сообщений на частные каналы другого пользователя.
Давайте рассмотрим пример простой системы запросов друзей.
- UserA отправляет запрос другу в UserB.
- UserB прослушивает свое собственное имя динамического частного канала под названием DynamicPrivateChannelB
(как UserA найдет имя канала для UserB, которое является приватным? Im думает, что единственный способ для этого состоит в том, что частный канал UserB должен храниться в таблице базы данных для каждого пользователя loggedin для запроса. Правильно ли я думаю?)
<?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') )
);
?>
С. Если мы всегда генерируем имена динамических частных каналов, сохраняем их в таблице базы данных, обновляя каждый раз, когда генерируются новые имена динамических каналов. Я думаю, что это вызовет проблему, потому что некоторое сообщение не будет доставлено, поскольку новые имена динамических частных каналов заменяют старые.
Д. Таким образом, у меня есть много уведомлений для отправки на один канал, например, New Friends, New Private messages, New Gifts и многие другие. Как отправить все эти данные на канал и как узнать и проанализировать входящие новые данные уведомлений. Я знаю, что JSON - это формат отправки, но я не уверен относительно формата отправки.
Согласно эта ссылка, один канал Pubnub может содержать только до 100 сообщений. Означает ли это, что если 200 сообщений поступают сразу в один канал, первые 100 доставляются, а остальные остаются в очереди? Как насчет того, если сразу поступит 10 000 сообщений на один канал? Все оставшиеся сообщения остаются в очереди? если да, то как он доставляется абоненту в реальном времени?
Позвольте мне привести еще один простой сценарий, который я пытаюсь достичь.
- Пользователь аутентифицирован и зарегистрирован на веб-сайте.
- UserA создает собственное имя динамического канала, UserAx732dsw3efsdfsdfsdf
- UserA начинает прослушивание своего недавно созданного канала UserAx732dsw3efsdfsdfsdf
(Теперь пользователь должен начать получать сообщения от других)
- UserB отправляет личное сообщение userA.
(Теперь, только userA должен получить уведомление на своем личном канале о новых частных сообщение, как userB или Система узнать канал имя UserAx732dsw3efsdfsdfsdf, потому что это частный канал динамически генерируется userA, ни Система, ни userB имеет доступ к нему. То же самое происходит для userBтакже, если userB должен быть уведомлен каким-либо другим сущностью или системой снова, должен быть способ узнать динамическую имя канала userB.
Другая проблема заключается в том, что, если пользователь динамически генерирует имя канала каждый раз, когда он/она регистрируется на веб-сайте. Что произойдет со всеми сообщениями, которые были отправлены на динамический канал? Выпускаете ли pubnub все созданные имена каналов на своем сервере? Есть ли способ, которым система или пользователь может узнать, является ли имя канала еще собственностью и, по крайней мере, один пользователь слушает канал? ".
Мне интересно узнать это из-за следующих понятий, которые у меня есть:
- UserA создает dynamicChannelA, когда он вошел в систему на веб-сайте 1AM.
- UserA начинает получать много уведомлений на свой динамический канал dynamicChannelA
- Теперь UserA выходит из веб-сайта в 1:30 утра, что произойдет со многими другими пользователями, которые все еще вызывают уведомление его dynamicChannelA, потому что в следующий раз, когда UserAвойдите в веб-сайт, UserA будет слушать разные динамическое имя канала. UserA не будет слушать предыдущие канал dynamicChannelA.
Я думаю использовать метод извлечения имени канала для конкретного пользователя из таблицы базы данных. Есть ли способ или способ предотвратить несанкционированную подписку на канал? Потому что любой может подписаться на имя канала, если у них есть ключ подписки и имя канала независимо от того, как долго имя канала. Мне просто интересно, потому что вся подписка происходит на стороне клиента, и вид подписки и названия каналов видны.