1

問題

サーバー側で実行されているプログラムとクライアント側で実行されているJavaScriptの間を行き来できるかどうかを確認しようとしています。プログラムからのすべての出力はJavaScriptに送信されてユーザーに表示され、ユーザーからのすべての入力はJavaScriptからプログラムに送信されます。

JavaScriptに出力を受信させ、入力を送信させることは、AJAXを使用して簡単に実行できます。問題は、サーバー上ですでに実行されているプログラムにアクセスする方法がわからないことです。

試み

PHPを使おうとしましたが、乗り越えられないハードルにぶつかりました。これで、を使用して問題なくPHPでプログラムを実行できますproc_openstdinとストリームにフックstdoutでき、プログラムから出力を取得して入力を送信することもできます。しかし、私はこれを一度しか行うことができません。

同じPHPスクリプトを再度実行すると(?)、プログラムを再度実行することになります。したがって、複数の実行から得られるのは、プログラムがstdout最初に何回も書き込むものだけです。

現在、すでに実行中のプログラムのとストリームproc_openにアクセスする方法がわからないため、入力と出力のみを処理することになっているスクリプトで使用しています。私の見方では、同じPHPスクリプトを複数回実行しても、実行中のプログラムの状態を維持する必要があります。およびストリームによって返され、フックされたリソースを維持します。stdoutstdinproc_openpipesstdinstdout

$_SESSION動作しません。リソースを維持するためにそれを使用することはできません。

プログラムでそのようなことを行ったり来たりする方法はありますか?どんな助けでも本当にありがたいです。

4

3 に答える 3

3

これはWebSocketの仕事のように聞こえます

http://socketo.me/またはhttp://code.google.com/p/phpwebsocket/のようなものを試してください

私はいつもこの種のことにNodeを使用してきましたが、上記の2つのリンクと他のいくつかのリンクから、PHPのオプションもあるように見えます。

于 2013-01-20T07:17:23.063 に答える
0

もっと効率的な方法があるかもしれませんが、プログラムに出力をテキスト ファイルに書き込んでもらい、そのテキスト ファイルの内容を php で読み取ることができます。そうすれば、実行中のプログラムからデータの完全なストリームにアクセスできます。ファイルのサイズを管理したり、複数のクライアントからの要求を処理したりすることには問題がありますが、必要に応じて十分な単純なアプローチです。

于 2013-01-20T07:22:58.520 に答える
0

これが PHP の仕組みであるため、同じプログラムを再度実行しています。あなたの場合、クライアントは HTTP リクエストを行い、スクリプトを実行します。2 番目の要求は、スクリプトを再度実行します。継続的なやり取りが可能かどうかわからないので、スクリプトで個別のトランザクションを処理できるようにすることをお勧めします。

同じ「相互作用」のさまざまなステップを把握するには、前のステップに関するデータをデータベースに保存する必要があります。基本的に、スクリプトでクライアントを識別するために、すべてのクライアントに一意のハッシュを与える必要があります。そうすれば、誰がリクエストを実行したかがわかり、あるユーザーからの連続したリクエストと別のユーザーのリクエストを区別できるようになります。

スクリプトが重く、長時間実行される場合は、2 つのスクリプトを作成することを検討してください。この場合、2 番目のスクリプトがデータベースにデータを入力し、重いスクリプトがそこからデータをフェッチするだけです。

于 2013-01-20T07:50:31.123 に答える