3

エンジン Crafty に対してチェスをプレイするための Web アプリケーションを作成したいと考えています。私は PHP と JavaScript を初めて使用するわけではありませんが、サーバー プロセスと対話する方法を学ぶ必要があります。Web アプリケーションや (jQuery) ajax は、サーバー上で実行されている (Linux) プログラムと双方向に対話するにはどうすればよいですか?

現時点では、(Apache) ローカル ホストで開発しています。Crafty は私の Ubuntu PC にインストールされています。このよく知られているチェス エンジンには GUI がなく、コマンドによってターミナルで実行されます。

$ /usr/games/crafty

したがって、それに対してチェスをプレイしたり、計算を確認したりすることもできます。

ターミナルで狡猾

関数 proc_open() または exec() を使用して、PHP で Crafty を実行できます。見つかったほとんどのドキュメントには、出力ストリームはファイルである必要があると記載されています。新しいデータが追加されたかどうかを確認するために、そのファイルを (たとえば ajax によって) 常にポーリングする必要がありますよね?

Crafty は、「別のバリエーションを計算しました」または「移動を決定しました」などと Web ページに直接話しかけてから、この情報を Web ページに表示し、ターミナルと同様に、ユーザーにカウンターの動きを与えることができます。一部のセッション/ストリーム/リスナーを使用することはできませんか?

まったく手がかりがありません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

1

fifos と&演算子を使用することをお勧めします。理由は次のとおりです。

  • PHP リクエストごとに狡猾に開始するのではなく、ゲームごとに 1 回だけ開始したい
  • リクエストの最後に狡猾な終わりを持ちたくない
  • 移動リクエストは、このすでに実行中のインスタンスと対話する必要があります。

だから私がすることは次のようなものです:

  • を使用して FIFO のペアを準備しmkfifoます。これは、PHP またはシェルから実行できます。
  • ゲームの開始時に、次のようなものを実行します/usr/games/crafty <stdin.fifo >stdout.fifo 2>stderr.fifo &
  • あなたの動きのために、AJAX PHP リクエストをstdin.fifo
  • サーバーの移動については、AJAX で長いポーリングを行い、サーバー側で開きstdin.fifo、次にstream_select()
于 2012-11-27T12:20:17.133 に答える