プログラミングテクニックネットワーク基本TCP?UDP?まず、通信をTCPでやるかUDPでやるか、ということについて。一般的なコト言うと、TCPは信頼性が高く、UDPはオーバーヘッドが少ないと言われてます。個人的にはMMOでも大抵の場合TCPでOKだと思います。ヘッダが短いUDPは正直かなりの魅力です。UDPでも再送信機構など作って信頼性を持たせることも可能でしょう。それでもおいらがTCPを推す理由は、ユーザー側の負担が少ないからです。TCPですと、ユーザー側の負担がかなり低いと思います。ファイアーウォールなどであえて遮断しない限り、大抵セッションが確立できます。ユーザーが何も設定しなくともうまく動作するかもしれません。なかった場合にはUPnPでなんとかして...。それでもダメなら、ユーザーにルーターの設定をしてもらう必要があります。それでもダメな場合もあります。多くの人に遊んでもらいたいと思うなら、なるべく避けるべきだと思います。みたいにするのが理想だと思います。このドキュメントでは特に言及しないかぎり、TCP接続で通信を行う場合の話をします。ちなみにmmo!、sandbox(仮)共にTCP接続を使っています。mmo!のボイスチャットについてはUDPのP2Pでやってます。通信量が多くなります。そのメッセージがAさんのクライアントからサーバに送られます。サーバはB・C・Dさんの3人に「Aさんがアクションをした」というメッセージを送ります。いうことに依存しますが、サーバ→クライアントの方が通信量は相当多くなります。そのアクションは、サーバ→クライアントの通信のみ発生させますので、その分も多くなります。場合は上下の帯域は同じくらいか、ADSLなどでは上りが帯域が少ないと思います。上り(サーバ→クライアント)が問題になります。サーバ→クライアントで行うことになるでしょう。通信量の問題については「ネットワーク通信量」のページで詳しく説明します。ネットワーク処理のI/O戦略ネットワークのソケットはいろんなI/Oの方法があります。簡単に言うと接続や送受信で待ちが発生する場合にどんな方法で待つか、ということです。Windowsの場合を書きます。ブロック型ソケット純非ブロック型ソケット非同期型ソケット(ウインドウメッセージ利用)select使用イベントオブジェクトオーバーラップI/OI/O完了ポート(IOCP)http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/io-strategies.htmlあたりを参考にしてください。非同期型ソケットでOKでしょう。ネットワーク処理の負荷が問題になることは無いので、使い勝手の良さが第一条件になります。ウインドウメッセージとしてソケットイベントが飛んでくるのは処理しやすいです。あと、重要なのは、シングルスレッドで処理できるトコロです。「まともな」コードを書こうと思ったら、かなり気を遣う作業になります。シングルスレッドでできる処理はシングルスレッドでやりましょう。)サーバについては、腕に自信があれば効率が最も高いI/O完了ポートで。オーバーラップI/Oも悪くないです。使い慣れてる人なら割り切って使うのもアリかも...。I/O完了ポート・オーバーラップI/Oには効率で及ばないですが。linuxでサーバを作る場合にはepollで良いと思います。linuxでクライアントは...よくわかんないです...フレーム単位で処理するだろうから純非ブロック型ソケットでもいいかな...ちなみにmmo!のサーバでは非同期ソケットを、sandbox(仮)のサーバではI/O完了ポートを使用しています。クライアントはどっちも非同期型ソケットです。ゲームシステムにあわせて実装してください。バイナリ形式のデータで良いでしょう。次にメッセージの種類があり、以降はメッセージによって変わります。(まとめられる可能性もあります)。処理できない状態かもしれません。最初にメッセージのサイズを入れた方が良いでしょう。実際の通信では以上のメッセージを暗号化して送受信しています。暗号化についてはセキュリティのページで説明する予定です。プログラミングテクニック。