2

私は、JSON形式のRedisでセッションを処理するPHPでWebサイトを構築しています。

このようにして、PHPインタープリターとnode.jsサーバーの両方からセッションにアクセスできます。

私がやろうとしているのは、そのWebサイトに通知を追加することです。私が考えていた手順は次のとおりです:(すべてを単純化するための単純な友達リクエストとして考えてください)

  1. ユーザーAが友達リクエストを送信します。
  2. PHPはcURLを使用してnode.jsサービスに通知を送信します
  3. ユーザーBは、socket.ioを介してnode.jsに接続しているため、通知を受け取ります

これを達成するための一般的なガイドラインは何ですか?ユーザーAとBが異なるサーバーにいる場合、水平方向にスケーリングすることは不可能であることが私には明らかです。

前もって感謝します。

4

4 に答える 4

1

パブリケーション/サブスクリプション プロトコル、アーキテクチャを使用して、ここで Web ソケットを利用できるように思えます。

Web ソケットを使用してサーバー クライアント機能を取得します。Node は、小さな IO がたくさんある Websocket サーバーに最適です。http://en.wikipedia.org/wiki/Web_socketsを参照

共有セッションがphp-ノード通信に必要かどうかはわかりません。クライアントにソケットを介してリクエストをプッシュさせ、必要に応じてリポーズを処理させるだけです。

于 2012-10-14T13:50:14.667 に答える
0

あなたが提案するアプローチはかなり合理的に聞こえると思います。ただし、サービスに直接リクエストを行う代わりに、メッセージキュー(zeromq、rabbitmqなど)を使用することを検討できます。これにより、キュー処理にロジックを簡単に追加してメッセージを渡すことができるため、より簡単にスケーリングできます。正しいノードインスタンス。

特別な構成なしで安価なVPSでsocket.ioとの1400の同時接続を取得できたので、トリックがなくても非常にうまく拡張できるはずです。私の場合、これらの接続のほとんどは、ほぼ常にデータを送受信していました。それはおそらくそれ以上を処理できたでしょう、1400'ishは単に私がたまたま得たユーザーの最大数でした。

私はそれらすべてのユーザーを最初に取得することについてもっと心配したいのですが;)

于 2012-10-14T13:56:41.167 に答える
0

Redis の組み込みの pub-sub 機能を使用します。PHP サーバーがリクエストを受け取ると、その目的のために設定されたチャネルにリクエストを発行します。各ノードサーバーはそのチャネルにサブスクライブし、関係するユーザーがそれに接続しているかどうかを確認します。その場合、socket.io 経由で通知を送信します。おまけとして、余分なネットワーク接続が不要になり、全体的なロジックが簡素化されます。

于 2012-10-14T22:48:18.523 に答える
0

必要に応じてデータベースをセットアップするだけで、アクティビティが行われるたびにノードjsに関連情報をredisを介してphpに転送し、プロセスを作成し、チャネルを介してphpからノードに応答を返すように指示し、テーブルからの通知をチェックし続けます。見せる

于 2015-08-25T17:40:52.090 に答える