シンプルな2プレイヤーゲームを構築し、インターネット上で通信し、サーバーにカスタムコードがない場合はどうすればよいですか?
-
23-09-2019 - |
質問
インターネットを介して通信するシンプルな2プレイヤーゲームを構築するにはどうすればよいですか?
次の問題を解決する必要があります。
ルックアップまたはランデブー - 2人のプレイヤーがお互いを見つけたいと思っています。
継続的なコミュニケーション。どちらのプレイヤーも、合理的に迅速な時間枠(電子メールタイプのレイテンシではなく、IMタイプのレイテンシ)で、反対側に情報を配信する必要があるアクションを開始できます。
この点で、私はそれが2ウェイチャットと同等であると思います。そこでは、人々がお互いを見つけて、またペアになったら、相互に合わせていることを望んでいます。
さらなる要件:
とりあえず、エンドポイントがWindows OSであると仮定して、比較的最近のものであると仮定します。
どちらのエンドポイントマシンもインターネットから直接アクセスできないと仮定します。それらが入ってくるリクエストをブロックするファイアウォールの後ろに隠されたクライアントマシンであると仮定します。マシンはアウトバウンドリクエストを行うことができます。 (たとえば、HTTPを超えて、しかしTCPも問題ありません)
コミュニケーションはプライベートでなければなりません。簡単にするために、すでに共有された秘密が存在し、エンドポイントがAESを実行できるとしましょう。私がこれが意味することは、中間監督がメッセージパケットを復号化する必要はないということだと思います。復号化はエンドポイントでのみ発生します。
すべてのカスタムコードは、クライアントPCでのみ実行する必要があります。
インターネットには、私の管理下にあるサーバーがないと仮定します。
IMサーバーなどの相互通信を容易にするために、サードパーティサーバーを使用して、無料である限り、カスタムコードをインストールする必要はありません。
このデザインを促進するために利用可能なAPIは何ですか?
IM APIでこれを行うことはできますか? WCF? Windowsメッセンジャー用のWCFチャネルはありますか?
どのプロトコル? http?私はこれを「ピアツーピア」としてタグ付けしましたが、私はそれを意味します 事実上;正式なP2Pプロトコルには難しい要件はありません。
どのメッセージ形式を使用しますか?
編集
サーバー周辺の要件を明確にするために、私が望むのは私の制御下にあるサーバーではありません。また、どのサーバー上のカスタムコードもありません。それは「サーバーなし」と同じではありません。
このように考えてみてください。送信側と受信側に書いたカスタムコードを使用して、SMTPを介して電子メールを送信できます。私のカスタムコードは、無料のSMTPサーバー仲介者を介して接続できます。これには、SMTPサーバーにコードをインストールする必要はありません。これは私が望むもののようなものですが、LATENCYのため、SMTPは受け入れられません。
編集2
私もこれを見つけました: libpurpleのようなインスタントメッセージング用のライブラリですが、c#で書かれています
答え
IMフレームワークにライブラリを使用して、自分がやりたいことをすることができます。 Windowsライブメッセンジャーを使用してそれを行う簡単な方法の1つは、 メッセンジャーアクティビティSDK. 。これは概念を証明しますが、実際には一般的な解決策ではありません。ただし、LibpurpleなどのさまざまなメッセンジャーシステムのIMライブラリやIRCチャネルにLIBSを使用すると、同様のことを実現できます。これらのすべての場合、IMサーバーはファイアウォールに浸透する通信インフラストラクチャとして機能します。
他のヒント
実際の分類中に使用することになるグリッド検索で同じデータを使用することはOKですか?
分類器をトレーニング(フィッティング)するためにこのデータを使用することはできません。
StratifiedKFold
によって行われたクロス検証は、ハイパーパラメータ(アルゴリズム設定)を最適化しながら検証セットを保持するのに十分なデータを持っていない状況を対象としています。また、検証セットスプリッタを作成し、Scikit-Learnの組み込みのクロス検証に頼るのに怠惰すぎる場合は、
refit
のGridSearchCV
オプションは、クロス検証で最適な設定を見つけた後にフルトレーニングセットで推定量を再登録します。 ただし、には、が登録されているデータに訓練された分類子がすでにラベルを持っているので、登録されたデータに訓練された分類子を適用します。分類器の正式な評価をしたい場合は、あなたがすべてのあなたのグリッド検索、検証とフィッティングを完了するまで、最初からテストセットを保持する必要があります。
少なくとも2人のクライアント/プレーヤー間で通信しなければならない基本的な必要性により、2人のゲームゲームごとに何らかのタイプのサーバー環境が必要です。各クライアント/プレーヤーは、他のリンクされたクライアントと通信するための独自のサーバーとして行動することもできます。ただし、すべてのクライアント/プレーヤーをいつでもタブに監視する必要性と、他のクライアント/プレーヤーの検索を促進する必要性には、最初に何らかのタイプのサーバー環境が必要です。
プレイヤーがお互いを見つけることができるように、無料のメッセージボードサーバーの1つにメッセージボードをセットアップできます。おそらく、IPアドレスを交換するためにプライベートメッセージを使用するように勧めたいと思うでしょう。次に、IPアドレスを使用して接続するプロトコルを使用します。それで頑張ってください。ファイアウォールは痛みになります。
それから、もちろん、ペアの1つのマシンはサーバーとして機能し、もう1つのマシンはクライアントとして機能する必要があります。ソフトウェアには両方のセットのコードが含まれている必要があります。私はそのようなゲームを書きましたが、通信コードが少し混乱することを伝えることができます。
コミュニケーションを促進するためにWebサービスを書いた場合、あなたは人生でずっと幸せになると今すぐお知らせします。しかし、そのためにはサーバーが必要です。
幸運を。あなたはそれを必要とするでしょう。
または、Microsoft MessengerのようなIMクライアントのためにゲームを書くこともできます。私はそのゲームを見てきたので、それができることを知っています。
誰かが言ったように、2人のプレーヤーの間に媒介サーバーがない場合、まだできないかもしれません。サードパーティサーバーを使用して喜んでいるので、使用してシステムを構築することをお勧めします Googleアプリエンジン + xmpp httpを超えて。インターネットやファイアウォールの背後でうまく機能します。それでも無料です(システムがGAEクォータから成長しない限り)。
ピアツーピアは、ファイアウォールの制約のために出ています。とにかく、これはディレクトリサービスでは実際には簡単ではありません。
私が使用する次の最も簡単な方法は、多数のスーパー安価なWebホスティングサイトの1つに非常にシンプルなCGIサーバースクリプトを投げることです。このルートに行きたくないようです。いくつかの特別な理由はありますか? 100行のコードと超安価なサーバーは、あなたが求めているすべてのものなどを提供する必要があります。
ある種のサードパーティチャットライブラリのものに接続できると思います。現在のIMプロトコルについては知りませんが、古き良きIRCとゲーム用の別のチャンネルが機能します。 FTPを使用して一緒に何かを丸石することさえできます。無料のブログサイトに関するブログのコメントも機能します。問題はなぜですか?
これらはすべてKludgesです。彼らは、鈍角、不可解な、そしてスケーリングの悪い方法で仕事を成し遂げます。
Webサーバーソリューションを再考することをお勧めします。
矛盾する要件がたくさんあります。どちらのマシンもサーバーとして動作することができず、中央に各クライアントにメッセージをルーティングする場所にトランスポートサーバーが必要になるため、どちらのクライアントも着信要求をブロックすることを意味します。現在、あなたが尋ねていることは、サーバーの要件なしを考えると、ほとんど不可能です。