26

PHPベースのWebサイトにプッシュ通知を実装しようとしています。目標は、Stackoverflowや他のサイトが持っているものに似たものを作成し、ユーザーがメッセージを受け取ったときにリアルタイムでユーザーに通知することです。

私はデータベースとしてmysqlを使用し、サーバーとしてApacheを使用しており、これらの通知のフレームワークとしてAmazon-SNSを使用することを検討しています。これは、そのサービスが意図されているように思われるためです。

私は、プログラムsending.phpreceiving.phpページがどのように設定されているかを文献からよく理解していません。私はそのsending.phpページがただあるページに関係していると思い$_POST['message']ます、しかしそこから私は本当に失われます。

receiving.phpプッシュ通知のページがどのように表示されるかを理解するのに役立つことがあれば、大いに感謝します。

4

2 に答える 2

15

働く

HTML5rocks は、WebSocket がどのように機能するかについて、こちらで適切な説明を提供しています。

Websocket をサポートしているブラウザーで Websocket を利用できます (最新のブラウザーはすべて優れたサポートを提供するため)。

入門

次のいくつかのリソースから始めることができます。

HTML5rocks

ネッツ+

Nettuts+ は、websocketsを使い始めるための優れたチュートリアルを提供します。

Websocket 対応ブラウザの場合

後退する

Modernizrを使用して、クライアントのブラウザーが Websocket をサポートしているかどうかを検出できます。フォールバックとして、Websocket の代わりにフラッシュを使用できます。

これらのプロジェクトでは、WebSocket を使用しないか、無効にしてブラウザーで実行すると、web-socket-jsが使用されます。ネイティブよりも効率は劣りますが、それでもロング ポーリングよりもレイテンシははるかに低くなります。

Flash を搭載したブラウザは、 web-socket-js shim/polyfillを使用して WebSocket をサポートできます。

参照:

WebSocket の代替

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

于 2012-07-21T18:01:02.757 に答える
4

私が行った実際の実装を共有したかっただけです。@Virendraの優れた回答のリンクを読んで気付いたように、プッシュ通知の実装には多くの困難な問題があるため、優れたSAASであるPusherを使用することにしました。

私が最も感銘を受けたのは、これを機能させるために記述しなければならないコードがいかに少ないかということです。下記参照。私のサーバー側はPHPです(プッシャーには多くの言語のライブラリがあります)。

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>
于 2013-02-18T16:16:07.847 に答える