はじめまして。山口と申します。
私もPHPのWAFで殆どの機能を構築しPUSH通知のところだけNodeを利用する構成を以前模索したことがあります。
その時は一応動作するところまでいけましたので簡単に説明します。
手元にPCがないので概略になりますがご了承ください。
例えばPHPのアプリケーションがログイン機構を持っていて、
(例えばFacebookのように)ユーザー毎に通知を出し分けたいような場合です。
まずNodeが持つWebsocketのセッションとPHP側で持つHTTPのセッションを共有化します。
http://d.hatena.ne.jp/sugyan/touch/20110406/1302090071
上記のすぎゃーんさんの記事を参考にしつつ、phpのアプリ側のセッションIDが入ったcookieをnodeになげて、
nodeからphpのアプリに投げて、
node側で、websocketのセッションとPHP側のセッション情報、
例えばログインユーザーIDなどを紐付けます。
後は、PHPからNodeに対してHTTPリクエストないし、
RedisのPubSubを使うなどして、
任意のタイミングでPUSHしたい対象ユーザーの一覧と、PUSHしたいJSONデータなどを渡します。
Node側では、そのPHPからのリクエストを元に、必要なデータを必要なユーザーに対して、Socket.IO経由でデータを送る事でPUSH通知が実現できます。
セッション共有化の部分とその後のPHP,node間のデータやりとりのフォーマットだけ決めてしまえば、Node側は100行程度で完結し、
以後nodeのメンテは必要ないのがメリットです。
これだけだと分かりにくいかと思いますが、ご参考になれば幸いです。
@takyam
--
---
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
--
このトピックの登録を解除するには、https://groups.google.com/d/topic/nodejs_jp/gU2347-33PQ/unsubscribe にアクセスします。このグループから退会し、グループのすべてのトピックの登録を解除するには、nodejs_jp+...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
このトピックの登録を解除するには、https://groups.google.com/d/topic/nodejs_jp/gU2347-33PQ/unsubscribe にアクセスします。このグループから退会し、グループのすべてのトピックの登録を解除するには、nodejs_jp+...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
KOBA789です。
クライアント側で document.cookie を使って Cookie を取得するのはセキュリティ上の理由で非推奨です。セッション情報の Cookie は原則 HttpOnly にすべきです。
Socket.IO のコネクションにセッション情報を渡す安全な方法は、Node のサーバーを PHP 側と同じドメインで動くようにして、Socket.IO のハンドシェイク HTTP リクエストのヘッダから Cookie を読むことです。
以上、重箱の隅をつつくようですみませんが、よりセキュアなアプリケーションを構築するためのお役に立てればと思います。
KOBA789です。
細かいとこですが、Same-Origin と Cookie の読み出しポリシーは異なるので、確かポートが違っても読み出せますね。
山口です。
>確かポートが違っても読み出せますね
お、そうなんですね。勘違いしてました。
ポート違いが許可されてるなら構築も簡単になりますね。
ありがとうございます!
このトピックの登録を解除するには、https://groups.google.com/d/topic/nodejs_jp/gU2347-33PQ/unsubscribe にアクセスします。このグループから退会し、グループのすべてのトピックの登録を解除するには、nodejs_jp+...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。