2010-12-02 18 views
0

私はLinux上のコンソールベースのアプリケーションであるゲームサーバーで動作するために、いくつかの "コントロールパネル"をPHP上に作成するタスクを持っています。 だから私は起動し、停止し(問題はない)、アプリケーションのコンソールで作業する必要があります - 文字列コマンドを送信し、出力をキャッチします。PHPでバックグラウンドで実行されるコンソールアプリケーションで動作する最善の方法は何ですか?

どのような方法が最適ですか? 私はいくつかの.shスクリプト/テンプレートを作成し、php shell_execコマンドで呼び出すことを考えます。これは最も簡単な方法です。 しかし、コンソールで作業を実装する方法 - コマンドを送信して出力を捕捉する最良の方法は何ですか?スクリプトを実行する前に "fg"を呼び出し、後に "bg"を付けます。 画面を使用して切り替えますか?

これを行うにはどのような方法が最適ですか?

+2

場合によっては、http://stackoverflow.com/questions/1746207/how-to-ipc-between-php-clients-and-ac-daemon-serverを見てください。 – Andrew

答えて

0

「他のアプリケーション」をバックグラウンドでデーモンとして実行し、socket(tcp、unix、..)を介して通信するのが最善の方法です。

コンソールベースのアプリケーションを実際に開発すると、これは非常に簡単に実行できます。そうでない場合、そのアプリケーションがstdin/stdoutからのみ読み書きする場合、ソケット上のこれらの2つのI/Oチャネルを公開する他のコントローラプロセスを構築することができます。

これについて私が大げさに思うのは、subprocessモジュールを使って他のプロセスをバックグラウンドで実行し、それと通信するPythonスクリプトです。それから、Pythonスクリプトをソケットを開いてPHPアプリケーションと対話させます(もちろん、好きな言語で実行できるはずです)。Mine is Python :))。

0

私はちょっと夢中になりました。 名前付きパイプ - "mkfifo pipename"を作成してshell_execから処理することができます(たとえば、 "echo quit >> pipename"を実行できます)。

問題は、最後のコマンドですが、あまりにもクールです。プロジェクトのこの段階では、サーバーにコマンドを送信してコンソール出力をキャッチするだけです。 もう少し時間がかかると思っていますが、名前付きパイプを使用するのが最も簡単な解決策です。

+0

あなたが必要とするのは間違いなくUNIXソケットです(http ://php.net/manual/en/book.sockets.php)!彼らは名前付きパイプによく似ていますが、まったくソケットなしでは機能しませんd。 – redShadow

関連する問題