RPC W/ PHP-輸送メカニズムへの不可知論者
質問
最近のプロジェクトでは、CLIベースのデーモンとして実行されているPHPスクリプトがあります。このデーモンは、独立した労働者プロセスの監視/制御を担当します。
定期的に、ユーザーはPHP Webフロントエンドを介してワーカーを管理するリクエストを発行します(CLIデーモンとフロントエンドコードは同じ物理サーバー上にあります)。 フロントエンドでは、デーモンにメソッド呼び出しを行う必要があります。
これらの「リモート」メソッド呼び出しを処理する方法について混乱しています。標準のUNIXまたはTCPソケットを介してJSON-RPCなどのRPCプロトコルを使用することは進む方法だと思いましたが、JSON-RPC、XML-RPC、SOAPなどの実装はすべて、 http。私はウェブ上で通信していないので、HTTPは完全に不要です。
だから、2つの質問:
- PHP RPCパッケージのほとんどがHTTPに結合されているのはなぜですか?
- 上記のようにメソッド呼び出しを処理する最良の方法は何ですか?
解決
PHP RPCパッケージのほとんどがHTTPに結合されているのはなぜですか?
これは簡単。 PHPはWeb向けに調整されています。 PHPでCLIアプリケーションを作成することはまれです。
PHP RPCパッケージのほとんどがHTTPに結合されているのはなぜですか?
Javaなどの別の言語で実行されているプログラムでPHPを実行することがより一般的であり、そこには良い選択肢があります。
CLI PHPプログラムでは、すぐに使用できるソリューションを知りません。ただし、UNIXソケットを使用してカスタムソリューションを実装することが可能です。を参照してください ソケット拡張機能. 。 PHPでのマルチスレッドサポートが存在しないため、これをもう少し困難にする可能性があることに注意してください(複数の接続を処理するには、独自のシングルスレッドスケジューラをフォークまたは実装する必要があります...)
他のヒント
まだHTTPを使用してLocalHostに接続できます。これにより、ネットワークトラフィックが生成されません。ソケットを直接使用することで得られる本当の利点はないと思いますが、本当に別のトランスポートレイヤーが必要な場合は、ripcord(http://ripcord.googlecode.com/)を使用できます。独自のトランスポートレイヤークラス。完全な開示のために、私はRipcordの著者なので、私は偏見があるかもしれません。