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

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

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

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

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

За работой

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

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

Начиная

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

HTML5ROCKS

Nettuts +

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

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

Отступать

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

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

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

Справка:

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

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

Я просто хотел поделиться фактической реализацией, с которой я работал. Я решил пойти с большим SAAS, Pusher , так как в реализации Push 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) ); } в 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>