4

私はPHPアプリケーションを使用しています。これにより、ユーザーはプライベートプロジェクトを作成し、他のプロジェクトを招待することができます。ここで、node.jsとsocket.ioを使用して、リアルタイムのコメントや投稿などを行いたいと思います。

最高のアーキテクチャは何ですか?

私は今2つの解決策を見ています。

1つ目は次のとおりです。

  • ユーザーがAJAXクエリをPHPバックエンドに送信します: http ://example.com/comment_add.php?text= ..。
  • comment_add.phpはデータベースにコメントを追加し、AMPQ(またはもっと良いもの?)を介して、チャネルのサブスクライバーにコメントをブロードキャストするnode.jsサーバーに通知します。

2番目は:

  • ユーザーがAJAXクエリをnode.jsサーバーに送信します:http ://example.com:3000 / comment_add
  • Node.jsはリクエストをPHPバックエンドに送信し(しかし、どのように?そして承認はどうですか?)、応答を受信して​​から、チャネルのサブスクライバーにブロードキャストします。

最善の方法は何ですか?別の方法はありますか?これを適切に実装する方法は?

4

4 に答える 4

4

node.js + socket.ioを使用してリアルタイムWebアプリを作成することにした場合、PHPについて考える必要はなく、Ajaxも忘れてしまいます...Socket.ioがクライアントとサーバー間の通信になります。

しかし、はい、AjaxとPHPを使用して、Webサイトを高速に構築したり、リアルタイムを必要としないその他の機能を使用したりできます。

于 2012-09-22T08:54:26.190 に答える
2

2番目の方法が最良の方法です。httpを使用して、node.jsからPHPと通信できます。承認はnode.jsで行うことができますが、認証資格情報を毎回PHPに渡します

于 2012-05-08T02:02:50.400 に答える
1

最後に、私の実用的な解決策は#1です。

ユーザーがnode.js/socket.ioへの接続を確立すると、PHPセッションIDを使用して「subscribe」メッセージをnode.jsに送信するだけです。Node.jsは、PHPバックエンドへのPOSTリクエストを使用して承認をチェックし、すべてがOKの場合、ユーザーは接続を確立できます。

フロントエンドは、node.jsの前と同じようにすべてのリクエストをPHPに送信します。PHPは一部のオブジェクトを変更し、変更されたオブジェクトにアクセスできるユーザーを確認し、メッセージを(AMQPまたはredis pub / subなどを介して)node.jsに送信します。

{
    id_object: 125342,
    users: [5, 23, 9882]
}

次に、node.jsは、リストされたユーザーの誰がアクティブなソケットを持っているかを確認し、ユーザーごとにGETリクエストをPHPに送信します。

{
    userId: 5,
    id_object: 125342
}

このリクエストを受信した特別なPHPコントローラーは、クエリを実行して、指定されたユーザーIDの権限を持つオブジェクトを取得し、結果の回答とともにメッセージをnode.jsに送信します。次に、Node.jsはソケットを介してユーザーのフロントエンドに応答を送信します。

于 2013-05-09T07:26:56.483 に答える
0

1年前、大学で最終年度のプロジェクトを開始したときに、同じ質問に直面しました。私のプロジェクトは、Nodeをスタンドアロンとして使用するのにはるかに適していることに気づきました。ノードはI/Oの処理に非常に優れており、これはHTTP要求からデータベースクエリまで何でもかまいません。ノードの背後にPHPベースのWebサーバーを追加すると、不要な複雑さが追加されます。アプリケーションがCPUを集中的に使用するタスクを実行する必要がある場合は、必要な操作を実行する処理済みの「子」ノードを非常に簡単に生成し、結果を親ノードに返すことができます。

しかし、あなたが言及した2つの方法のうち、私は#2を選択します。Node.jsはさまざまな方法でPHPサーバーと通信できます。PHPサーバーとノードの間にUNIXソケット接続を作成することを検討できます。それが利用できない場合は、HTTPを使用してノードとPHPバックエンドの間で簡単に通信できます。:)

ここを見てください、これはあなた自身と非常によく似た質問の解決策です:http: //forum.kohanaframework.org/discussion/comment/57607

于 2012-05-08T02:08:21.070 に答える