2011-09-17 12 views
2

プログラミング競技(code war)では、ゲームの状態をA.I.に渡す場所を設定します。 XMLファイルとA.I.それは私のアプリに返すxmlファイルのそれの回答で返信します。競技会の各チームは、A.I.言語& O/Sを使用すると、最も快適です。プロセス間通信の最も簡単な方法は、どのO/Sおよび言語でも可能です。

パフォーマンスは重要ではありません。 2つの小さなxmlファイル(私はファイルだと言いますが、おそらくメモリにのみ存在します)が渡され、戻ってきます。しかし、クライアント(A.I.)側をどの言語でも迅速かつ簡単に実装できるように、シンプルさが重要です。

私は、サーバー上でTCPソケットを開き、状態XMLファイルを送信し、次に受信XMLモードを待っていると考えています。そして、私も待っているタイムアウトを持っているので、私は秒以内に答えを受信しなかった場合、私は彼らのためのデフォルトのターンを入れた。

クライアント側では、TCPソケット接続を待機し、xmlファイルを読み込み、その順番を決定し、xmlファイルを書き戻します。

これは、クライアントがほとんどの言語ですばやく簡単に作成できる場所を用意する最もよい方法ですか?

更新:これは、異なるマシンに各プレーヤーを持ちます。 WindowsとLinuxを好む人もいます。そしてそれはプロセスをより簡単にします。

感謝 - デイブ

答えて

0

あなたのクライアントとサーバが同じマシン上で実行されている場合、IPCのための標準入力/標準出力を使用することも簡単かもしれません。サーバはAIプロセスを実行し、XMLドキュメントをAI stdinに書き込んだ後、AI stdoutの応答を待ちます。

AIを長時間実行する必要がある場合(たとえば、多くの永続状態を維持する場合)、AIを2つの部分に分けることができます.1つは「常駐」で、もう1つはインターフェイスコンポーネントですゲームプロセスによって各ターンごとに実行されます。インタフェースコンポーネントは、言語に最も適したメカニズム(REST、共有メモリ、メッセージの受け渡しなど)によって、常駐する部分と通信できます。

+0

全く同じマシンではありません。なぜなら、Windowsや他のLinuxを好む人もいるからです。私はまた、1秒後に私はそれらをドロップし、私はそれが応答していないstdoutを読むためのWindows上の問題であることを見てきたので、stdoutが良くないと思う。 –

+0

同じマシンにいなくても、このように通信が構成されている場合は、netcatを使用してマシン間通信を管理できます。 AIを 'nc -l |とする。 AI | nc 'であり、サーバーは2つの一致する' nc'コマンドを実行します。 –

0

使用している言語を問わず、XMLパッケージが必要です。

HTTP over TCP/IPパッケージを使用することもできます。もちろん、ポート80を使用する必要はありません。それは、さまざまな言語に対して「標準」または「標準に近い」として利用可能な最高のサポートとの組み合わせかもしれません。

+0

httpの問題(とRESTと言う)は、サーバー側がA.I.これはシンプルなソケットよりも多くの言語でより多くのコードです。 –

関連する問題