Подтвердить что ты не робот

Как работают push-уведомления?

Я пытаюсь реализовать push-уведомления на моем веб-сайте на PHP. Цель состоит в том, чтобы сделать что-то похожее на то, что Stackoverflow и другие сайты имеют, которые уведомляют пользователя в режиме реального времени, когда они получают сообщения.

Я использую mysql в качестве моей базы данных, Apache в качестве моего сервера, и рассматриваю использование Amazon-SNS в качестве основы для этих уведомлений, поскольку это то, для чего, как представляется, предназначена эта служба.

У меня плохое понимание из литературы, как программно создаются страницы sending.php и receiving.php. Я бы предположил, что страница sending.php просто включает в себя $_POST['message'] на какую-то страницу, но оттуда я действительно потерялся.

Если что-то поможет мне понять, что будет выглядеть страница receiving.php для push-уведомления, я бы очень признателен ей.

4b9b3361

Ответ 1

В

HTML5rocks предоставили хорошее объяснение здесь, о том, как работают веб-сайты.

Ну, вы можете использовать Websockets для браузеров, которые его поддерживают (поскольку все современные браузеры обеспечивают хорошую поддержку)

Начало работы

Вы можете начать с этих ресурсов:

HTML5rocks

Nettuts +

Nettuts + предоставляют хороший учебник для начала работы с websockets.

Для браузеров, поддерживающих веб-сайты

Запасной

Вы можете использовать Modernizr, чтобы определить, поддерживает ли браузер клиента веб-узлы или нет, и в качестве резервной копии вы можете использовать flash вместо Websockets.

Для этих проектов при работе в браузерах без WebSockets или с отключенным, web-socket-js будет использоваться. Это будет менее эффективно, чем нативная, но все же гораздо более низкая задержка, чем длительный опрос.

Любой браузер с Flash может поддерживать WebSocket с помощью web-socket-js shim/polyfill.

Ссылка:

Альтернатива WebSockets

https://softwareengineering.stackexchange.com/questions/33713/is-there-an-alternative-to-html-web-sockets-now-that-firefox-4-has-disabled-the

Ответ 2

Я просто хотел поделиться фактической реализацией, с которой я работал. Я решил пойти с большим SAAS, Pusher, так как в реализации Push-уведомлений есть много сложных проблем, как я понял при чтении ссылок в @Virendra отличный ответ, что Pusher решает для вас.

На что меня больше всего поразило то, как мало кода вы должны писать, чтобы сделать эту работу. Смотри ниже. Моя серверная часть находится в PHP (Pusher имеет библиотеки на многих языках).

require('/application/thirdParty/pusher-html5-realtime-push-notifications/lib/squeeks-Pusher-PHP/lib/Pusher.php');
require('/application/thirdParty/pusher-html5-realtime-push-notifications/config.php');
$pusher = new Pusher(APP_KEY, APP_SECRET, APP_ID);

foreach($recipients as $row){                   
  $channel='my-channel'.$row->recipient_id;
  $pusher->trigger($channel, 'notifications', 
    array('message' => $row->message,
          'notification_id' => $row->notification_id) 
  );
}

Здесь HTML/JS (не перегружайтесь, большая часть этого кода состоит в том, чтобы заполнить маленький круг и список входящим уведомлением как Stackoverflow, а другие сделать это):

<script src="/application/thirdParty/pusher.min.js"></script>
<script>     
var myID=179; // would receive notification if myID matches $row->recipient_id above;
var myChannel = pusher.subscribe('my-channel'+myID);
myChannel.bind('notifications',
  function(data) {
        var message=String(data.message),
            url='/notifications/'+data.notification_id, 
            icon='<i class=\'icon-heart\'></i>',
            urlText=icon+message;

        var notificationRow='<li><a href='+url+'>'+urlText+'</a></li>';
         $('#notificationsDropdownList').prepend(notificationRow);   

        if(notificationCircleCount==0){
             notificationCircleCount++;
              $notificationCircle.show();
               $notificationCircleCount.html(notificationCircleCount);
        }
        else{
             notificationCircleCount++;
             $notificationCircleCount.html(notificationCircleCount);
        }
        console.log('Pusher happened'+data.message);                  
  } //function
); //myChannel
</script>