1

最近のプロジェクトでは、PHP スクリプトを CLI ベースのデーモンとして実行しています。このデーモンは、独立したワーカー プロセスの監視/制御を担当します。

ユーザーは定期的に、PHP Web フロントエンド (CLI デーモンとフロントエンド コードは同じ物理サーバー上にあります) を介してワーカーを管理する要求を発行します。フロントエンドは、デーモンへのメソッド呼び出しを行う必要があります。

これらの「リモート」メソッド呼び出しを処理する方法について混乱しています。標準の UNIX または TCP ソケット上で JSON-RPC などの RPC プロトコルを使用するのがよいと思いましたが、PHP 用の JSON-RPC、XML-RPC、SOAP などのすべての実装は、 HTTP。私は Web 経由で通信していないので、HTTP はまったく不要です。

だから、2つの質問:

  • ほとんどの PHP RPC パッケージが HTTP に結合されているのはなぜですか?
  • 上記のようにメソッド呼び出しを処理する最良の方法は何ですか?
4

2 に答える 2

1

ほとんどの PHP RPC パッケージが HTTP に結合されているのはなぜですか?

かんたんだよ。PHP は Web 用に調整されています。PHP で CLI アプリケーションを作成することはまれです。

ほとんどの PHP RPC パッケージが HTTP に結合されているのはなぜですか?

Java などの別の言語で実行されているプログラムで PHP に RPC を実行させることはより一般的であり、そこには適切なオプションがあります。

CLI PHP プログラムの場合、すぐに使える解決策を知りません。しかし、UNIX ソケットを使用してカスタム ソリューションを実装できるはずです。ソケット拡張を参照してください。PHP にはマルチスレッド サポートが存在しないため、これが少し難しくなる可能性があることに注意してください (複数の接続を処理するには、独自のシングル スレッド スケジューラをフォークまたは実装する必要があります...)。

于 2010-08-21T22:43:51.303 に答える
0

HTTP を使用して localhost に接続しても、ネットワーク トラフィックは生成されません。ソケットを直接使用することで得られる実際の利点はないと思いますが、本当に別のトランスポート層が必要な場合は、Ripcord (http://ripcord.googlecode.com/) を使用できます。独自のトランスポート層クラス。完全な開示のために、私はRipcordの作者なので、偏見があるかもしれません.

于 2010-11-16T17:16:28.083 に答える