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