7

Nginx をリバース プロキシとして使用して静的リソースを提供する PHP アプリを Apache 上で構築して実行しています。

各ユーザーのアクティビティ ストリームのアクティビティ ID を保存するために使用している Redis もインストールしています。アクティビティは MySQL データベースに書き込まれ、Redis はアクティビティ ID を各ユーザー ストリームにプッシュします。ユーザーがアクティビティ ストリームを受信すると、アプリは最初に Redis からアクティビティ ID のユーザー リストを取得し、次に MySQLIN()クエリを介して実際のアクティビティ データを取得します。

これはすべて非常にうまく機能しますが、このセットアップにリアルタイム機能を追加したいと考えています。これらのイベントをユーザーのブラウザーに直接プッシュし、一般的なライブ通知も追加できるようにしたいと考えています。

このために、node.js と socket.io をインストールしました。socket.io サーバーが正しく稼働しており、クライアントはページの読み込み時に自動的に接続されます。

私が苦労しているのは、PHP アプリ内から socket.io にメッセージを投稿する方法を理解することです。PHP と node.js は直接通信できないため、Redis を既にインストールして稼働させているため、Redis を仲介者として利用するのが最善であると理解しています。ただし、これについてどうすればよいかわかりません。

私が必要としているのは、通知を PHP から Redis に送信し、次に socket.io に送信して関連するクライアントにプッシュするプロセスの説明です (コード例は非常に役に立ちます)。

また、socket.io が送信先のクライアントをどのように認識するかがわかりません。この情報を渡し、すべてを同期するにはどうすればよいですか? これも必要ですか?PHP セッションを Redis に保存し、ユーザーが接続したときに socket.io にデータを収集させる必要がありますか? それとも別の方法がありますか?

前もって感謝します。

注意:私の PHP SESSION データは現在ディスクに保存されています。

4

2 に答える 2

1

Redis で pubsub チャネルを設定できます ( http://redis.io/topics/pubsubを参照してください)。次に、node.js プロセスからサブスクライブします。その後、PHP は pubsub にパブリッシュしてノードと通信します。クライアントごとに個別の pubsub チャネルを用意し、特定のクライアントにリーチするために必要なチャネルにパブリッシュできます。

于 2013-05-13T04:28:21.287 に答える
0

Redis は組み込みの websocket または http サーバーを提供しないため、チャネル データをストリーミングするには、php または node.js と統合する必要があります。Tweak メソッドを使用すると、redis 用の predis php ライブラリを使用して Redis サーバーを php に接続できます。ここで、php はデータを Redis にプッシュし、socket.io は Redis サーバーにプッシュされた新しいメッセージを追跡し、実際に接続しているユーザーに送信します。時間。

https://github.com/u-day/tweak/

于 2015-04-06T13:05:33.690 に答える