2013-05-09 39 views
20

リアルタイムの通知を追加する必要がある既存のPHPアプリケーションがあります。これを実現するために、私はnode.jsをインストールしました(すべてのリアルタイム機能のsocket.ioを追加しようとしています)。Node.js(リアルタイム通知用)を既存のPHPアプリケーションに追加

しかし、最後の3時間を研究し、両者をどのように統合するかについて頭を尽くそうと努力していたにもかかわらず、私は理解に近づくことはできませんでした。

私は現在、次を使用しています:

  • アパッチ
  • PHP
  • nginxの(のようなすべての静的コンテンツ用のApacheのリバースプロキシとして 画像/ CSSファイルなど)
  • MySQLの

クライアントからPHPにイベントを送信し、notificaを挿入するコードがすでに書かれていますデータベースに格納する。受信者が自分のページを更新すると、もちろん通知が表示されます。私は単純にclient.jsをリアルタイムで処理する必要がありますが、クライアントを設定する方法については紛失しています。

は、私が本当に知っている必要があり何、このシナリオを考えると、以下の通りです:

  1. どのように/私はまだにすべてのコンテンツを望む を与えてインスタンス化し、クライアントへのNode.js/WebSocketの接続である場合、 Apache/PHP経由で提供されますか?
  2. PHPからNode.jsにメッセージを送信し、 クライアントに通知する方法を教えてください。
  3. これをサポートするために、セットアップにどのようなバックエンドの変更を加える必要がありますか?

最後に、PHP関数を実行し、node.js/socket.io/websocketsがクライアントに通知を送信することを期待したいと思います。私はちょうどそこに着く方法を知らない。

例/情報/ガイドがありがとうございます。

+0

1.クライアントが要求されている軌道に乗るためにhere、です。 2. [HTTP経由](http://stackoverflow.com/questions/10048978/sending-messages-from-php-to-node-js); 3. [セットアップnginx](http://stackoverflow.com/questions/5009324/node-js-nginx-and-now)。 –

答えて

17

このシナリオでは、Socket.IOというNode.jsサーバーを設定します。これにより、ほぼリアルタイムのデータをクライアントに送信するためのクロスブラウザー方式が提供されます。

クライアントがPHPページを読み込むと、Node.jsサーバを指す<script>タグがSocket.IOをロードするようになります。ロードされると、Socket.IO JavaScriptクライアントはNode.js Socket.IOサーバーに接続し、イベントが送出されるのを待ちます。

これらのイベントをPHPから送信したいので、PHPアプリケーションとNode.jsの間に通信チャネルが必要です。私はこのためにusing Redis pub/subをお勧めします。基本的にPHPアプリケーションはメッセージを公開し、それを購読しているNode.jsサーバはメッセージを受信します。これらのサーバは、すぐにクライアントにメッセージを渡して、PHPからより多くのデータを取得することができます。 (私は、あなたのNode.jsサーバーが最初にそのデータを送信するのと同じくらい簡単かもしれないと思うでしょう)

あなたが望むなら、Node.jsをNginxサーバーの後ろに置くことができます。but you need the latest and greatest version for true web socket support

+1

これは、特に私がすでにレディスを使用してアクティビティストリームを構築しているので、完璧に聞こえます。スクリプトタグを使用する部分は、電球が消えるようなものでした。まさに私が何をしたのか。どうもありがとう。 – gordyr

+0

PHPとNode.jsの間の通信チャネルとしてRedisを使用する代わりに、Curlを使用してPHPからNode.jsアプリケーションにリクエストを送信するとどう思いますか?次に、Node.jsアプリのリクエストイベントで、接続されたソケットにデータ/通知を送信します。 – user345602

+2

@ user346665これは確かに選択肢ですが、pub/subを使用してホイールを効果的に再発明していると、アップ/ダウンしているサーバのリストを管理し、PHPスクリプトがハングするつもりです(あなたがこのようなことに対して本当の面倒なマルチコールを使用しない限り)。 – Brad

0

この質問は古いですが、ウェブソケットを実装しようとしていたときに見つけたので、これはあまりハッキングすることなく既存のプロジェクトに統合できる純粋なPHPソリューションを必要とする人に役立ちます。

Ratchet - PHP WebSockets

唯一の要件は、あなたのWebSocketサーバにPHPスクリプトからデータを渡すための方法として使用されているPHPのための結合zmqです。 PHPのインスタンスは、それを使用して構築されていない場合、あなたは見つけることができるそれhere

のGitHubのレポは例の多くは、あなたがhere

関連する問題