他に何か?たぶんあなたの質問に合うコーヒー一杯:-)
ゼロから質問に答えるには、基本的なTCP / IPネットワーキングからスケーラブルなアーキテクチャに至るまでのトピックを含む数冊のテキストが必要になりますが、それでも私はあなたにいくつかの方向性を与えるようにします。
質問:
- ポートでリッスンするか、ソケットまたはHTTPポート80 apacheリスニングスクリプトを使用しますか?(私はこれらの違いについて少しぼんやりしています)。
これらのそれぞれの定義が明確でない場合は、「できるだけ速く何百万ものハンドをプレイする」サービスを実装するように設計するのは少しうーん、行き過ぎだと思いますか?しかし、彼らが「無知は至福である」と言うので、それがあなたを止めさせないでください。
- うまくいくための良いフレームワークはありますか?
あなたのプロジェクトはNode.jsの良い候補だと思います。Node.jsは比較的スケーラブルであり、そのスケーラビリティに必要な複雑さを隠すのに優れていることが主な理由です。Node.jsには欠点があります。Googleで「Node.jsスケーラビリティの批判」を検索するだけです。より汎用的なフレームワークを使用するのとは対照的に、Node.jsに対する主なポイントは、スケーラビリティが難しく、それを回避する方法がないことです。Node.jsは非常に高レベルで具体的であるため、問題を解決するためのオプションが少なくなります。もう1つの欠点は、Node.jsがJavascriptであり、JavaやPhytonではないことです。
- メッセージタイプ?JSONまたはProtocolBuffersを考えています。
クライアントとサーバーの間に大量のトラフィックが発生することはないと思うので、JSONが普及しているという理由だけで、JSONを使用するかどうかは問題ではありません。
- それを速くする方法は?
本当の問題は、それをどのようにスケーラブルにするかです。人間対人間のカードゲームの実行は計算量が多くないため、計算の限界に達する前にI/O容量が不足する可能性があります。これらの制限を克服するには、マシン全体に負荷を分散させます。マルチプレイヤーゲームで行う一般的な方法は、同一のゲームサーバーへのリンクを提供するリストサーバーを用意することです。各サーバーには、プレイヤーが使用できるスロットの数が事前定義されています。これは、ブローカーマシンがクライアントのビジー状態に基づいてワーカーマシンをクライアントに割り当てる場合の、ブローカーワーカーアーキテクチャのバリエーションです。ゲームでは、ユーザーは自分のサーバーを選択して、友達と遊ぶことができるようにしたいと考えています。
関連している:
- プレーヤーが切断したことを検出するための優れたスキームを用意しますが、起動/手を失う前にネットワーク遅延などを考慮することもできます。
これは人間の時間スケール(ミリ秒ではなく秒)であるため、クライアントは、たとえば30秒のセッションタイムアウトを使用して、たとえば10秒ごとにキープアライブを送信する必要があります。キープアライブは、アプリケーションプロトコルのJSONメッセージであり、HTTPではなく、下位レベルでフレームワークによって処理されます。フレームワーク自体は、複数のhttpセッション(要求/応答)が同じ接続を通過できるようにするHTTP 1.1接続管理/プーリングを提供する必要がありますが、クライアントが常に接続されている必要はありません。これは信頼性と速度の間の適切な妥協点であり、ターンベースのカードゲームには十分なはずです。