2011-08-02 16 views
0

私は、ゲームサーバーとインターフェイスする小さなクライアントで作業しています。サーバーはHTTP経由で接続されたクライアントにメッセージを送信します。比較的簡単にクライアントに送られるテキストメッセージを解析し、応答を返送して返信します。多くの種類のメッセージを扱う一般的な方法

ここで私が理解しようとしているのは、プロセスを分割する方法です。私はスレッドがメッセージを受信し、それらをいくつかのデータオブジェクトに解析し、それらを処理する "着信"キューに配置したいと考えています。次に、別のスレッドがこのキューからメッセージを読み取り、それらを処理します(クライアントの頭脳またはAI)。そして、応答をサーバに返します。

AIスレッドにそのオーバーヘッドがないように、受信データがテキストを処理する(メッセージを分割し、重要なデータを取り出すなど)ためのスレッドを持っていたいと思っています。しかし、問題は、サーバーがクライアントに数百種類のメッセージ(クライアントが見えるもの、他のプレイヤー、あなたが発砲している場合など)を送信できることです。私は、このデータをきちんとした小さな構造にまとめて、AIがそれを素早く処理できるようにして、AIを簡単に書き直すことができます。

しかし、キューから何かを引き出し、それがどんなタイプのメッセージであるかを知るための関数を書くにはどうすればよいのですか?

例メッセージ:


(あなたが生きているかどうかを伝えます)
ALIVE 1つだけのデータオブジェクト、現在のゲームの時間

DAM(あなたが破損している場合伝える) を持っています
データが一杯で、あなたを傷つけた人がどれくらいいるのか、どれくらいの銃で、誰が見ているのかなどが分かります。

オブジェクトを作ることは可能ですatはこれらの異なるメッセージタイプをすべて扱うことができ、単一の関数で解釈できますか?非常に少数のメッセージは、共通の属性を持っているので、私は、私はここに完全なソリューションを探していないよ

継承するか、ただ一つ本当に大きなメッセージクラスを作ることは非常に良いだろう...、ちょうど右に私を指すとは思いません私はちょっとしたことを学ぶことができるでしょう:-)

+0

これはプロトコルと呼ばれます。難しいのは自分のことを定義することです。簡単な方法は、ライブラリを使用することです。私はプロトコルのバッファ(Googleによる)または退屈(facebookによる)を提案するかもしれません... –

+0

@Chris - 恐ろしい。私はGoogleのプロトコルバッファを使うつもりだと思う。あなたが答えにあなたのコメントをしたい場合は、それを受け入れるよ – Veaviticus

答えて

3

基本的にあなたが求めていることは、プロトコルと呼ばれ、どのようにデータが交換され、解釈されるかということです。伝統的には独自のものを定義することになります(コマンドの終わりを示すために改行でプレーンテキストデータを送信するなど)。しばらくして、あなたはそれ以上が必要とされていることを実現するために開始(どのようにあなたはどのようにエラーを処理できますか?バイナリデータを扱うのか?などなど)

幸いにもあなたのために人生を容易にするために、そこにライブラリがあります。最近の私は、ほとんどの私のニーズに対して単純なRPCライクなライブラリを好む傾向があります。例には、プロトコルバッファ(Google)、Apache Thrift(Facebook)、Apache Avroなどがあります。

+0

+1 Googleのprotobufのために。 zmqでそれをミックスして、あなたが完了したら、IMO :) – Josh

関連する問題