UDPとTCPの違い：ゲームサーバーをチャットとは別に運営する理由
Published: 2023-11-29 15:47:41

マルチプレイヤーゲームを作るとき、開発者はしばしばジレンマに直面する。

-   既にマルチプレイヤー機能を提供している既存のゲームサーバーを利用してチャットを実行するか？
    
-   ゲームサーバーを分離してチャットを独立させるか？
    

結局のところ、チャットはただのチャットメッセージでしょう？一人のユーザーや少人数のグループに送信される小さなメッセージなんだから、すでに構築されているものを利用したほうがいいんじゃない？何が問題なんだ？すでに構築されているものを利用することは、当初は良い選択肢のように思えるかもしれませんが、このデザインパターンを選択することで発生する可能性のある多くの問題があります。

ゲームサーバーとソーシャル機能（最も重要なのは [チャット](https://www.pubnub.com/use-case/in-app-chat/)を独立させるべき理由を説明します。そうすることで、ゲーム自体のパフォーマンスとスケーラビリティを向上させ、ソーシャル機能を将来的に新しい機能で簡単に拡張できるようになります。

**TCPとUDPとは何ですか？**
------------------

基本的に、TCPと[UDPは](https://www.pubnub.com/guides/udp/)インターネット上でのデータ転送に使用されるネットワークプロトコルです。TCPはコネクションオリエンテッドなインターネットプロトコルであり、一方UDPはコネクションレスなプロトコルです。

マルチプレイヤーゲームのプロトコルをめぐる大きな議論は、いつUDP（User Datagram Protocol）と[TCP（Transmission Control](https://www.pubnub.com/guides/tcp-ip/)Protocol）を使い分けるべきか、また、どちらを使うのがベストなのか、ということです。

その前に、オンラインゲームのアーキテクチャについて説明しましょう。

**UDP対TCPゲームサーバー：オンラインゲームをより管理しやすくする方法**
----------------------------------------

マイクロサービス指向のアーキテクチャは、大規模なアプリケーション（この場合はゲーム）を、独立してバージョン管理された小さなモジュール型サービスに分割し、シンプルで普遍的にアクセス可能なAPIを通じて相互に通信します。これにより、新しい機能の構築や、一度構築した帯域幅や機能の維持が非常に簡単になります。

ゲームサーバーとチャット機能を分離することで、インフラ全体がより管理しやすくなり、完全にマイクロサービス指向のアーキテクチャに近づきます。今回は、特にゲーム内チャットと、マルチプレイヤーゲームを動かすゲームサーバーとの関係を見てみましょう。

モノリシックなアーキテクチャでは、開発チームは単一のテクノロジースタックに閉じ込められてしまいます。新しい開発者を迎え入れたり、新しい技術やシステムのプロトタイプを作りたい場合、マイクロサービス・アーキテクチャの方がはるかに簡単に素早く動けます。

モノリシックなアーキテクチャでは、依存関係もより明らかになる。一つのアプリケーション機能に障害が発生すると、ゲーム全体がダウンしてしまう。ゲームをマイクロサービスに分割することで、1つのモジュールに障害が発生しても、障害の切り分けと修正が容易になります。

ゲームサーバーは以下のために構築されます。 [プレイヤーの動きと状態をリアルタイムで](https://www.pubnub.com/docs/general/presence/overview)をリアルタイムで提供するために構築されており、それはうまくいっています。同じ技術とデザインをチャットメッセージのために再利用することは、単に特定の機能に対して最適なオプションを使用していないだけです。分散化されたコンポーネントはメンテナンスが容易で、より良くスケールします。

![](https://images.ctfassets.net/3prze68gbwl1/h3rC4If7TY4W9s4s3NADr/ef310e0b3415530bc0cfcd72a089131c/game-infrastructure.png)

チャットをゲームサーバーから分離したゲームインフラの例。認証、プレゼンス、統計やリーダーボードなど、ゲームサーバーの外で他のサービスを実行することもできます。

**UDPとTCPのゲームサーバー比較：シームレスなゲーム体験とチャット・パフォーマンスの確保**
-------------------------------------------------

全体的なゲーム・パフォーマンスは、マルチプレイヤー・ゲームにとって重要な検討事項です。モノリシック・アーキテクチャでは、ゲームはラボで実行されるかもしれませんが、多数のユーザーが急ピッチで通信するオンライン・ゲームでは、チャット・メッセージの配信とゲーム体験の両方でラグや待ち時間の増加が見られるようになります。

この2つを分離することで、CPUとネットワークリソースをより効率的に使用できるようになります。ゲームサーバーの主な目的は、ゲーム内のすべてのユーザーにシームレスな体験を提供することです。そのため、処理能力はそのパフォーマンスを最大化するために使用する必要があります。

例えば、League of LegendsやEVE Onlineのようなオンラインバトルアリーナゲームがあるとします。ひとつのワールドに、一度に何百人ものプレイヤーがいる可能性があります。各プレイヤーが入力するたびに、ゲームサーバーを通じて何千ものメッセージが送信されることになります。そこにチャットメッセージが加わります。すべてのメッセージの優先順位が同じであるため、プレイヤーがチャットチャンネルをスパムし、ゲームサーバーを意図的に遅くすることは十分に可能です。

ゲームサーバーはすでに、物理、グラフィック、サウンドといった集中的なゲームプレイ体験を処理している。チャットメッセージ（1対1、グループ、チーム）を追加し、メッセージを解析して適切なユーザーにルーティングすることは、大規模なゲームではこれらのメッセージが徐々に蓄積され、ゲーム全体のパフォーマンスを低下させます。チャットチャンネルをマルチプレイチャンネルとは別に運営するのは当然のことです。チャットメッセージのルーティングよりも、もっと複雑な問題に適した重要な処理能力を盗んでいるのです。

**TCP vs UDP - 両方が必要な場合とそうでない場合**
---------------------------------

ペースの速いマルチプレイヤーゲーム（ファーストパーソン・シューティングゲーム、アリーナゲームなど）では、プレイヤーの動きを同期し、ゲームの状態を更新するためにUDPプロトコルを使用します。UDPヘッダーは、このようなゲームのアップデートをとんでもないスピードで送信するのに理想的ですが、メッセージは保証されません（次のメッセージが後ろに来るのが速いため）。

### なぜUDPがTCPより好まれるのでしょうか？その逆は？

TCP接続はメッセージ配信を保証するので、チャットには最適です。ゲームをUDPで、ソーシャル機能をTCPで実行すると、素晴らしいパフォーマンスが得られます。

![](https://images.ctfassets.net/3prze68gbwl1/3F6epR2uvWaGMsZs6QVgjF/43009b230140dde81fa41153063718d9/tcp-vs-udp.png)

しかし、ターンベースゲームのようなそれほど激しくないマルチプレイヤーゲームでは、ゲームプレイとチャットの両方にTCPが適しています。TCPはメッセージ配信を保証し、一手一手が重要なゲーム（スクラブルのターンや三目並べなど）では、マルチプレイヤーゲームプレイに最適なオプションです。もちろん、チャットをゲームサーバー接続から切り離すことは必要です。特に、ゲームが軌道に乗り、一度に何千人ものユーザーが接続するようになれば、なおさらです。

### 機能別にTCPとUDPを使い分ける場合は、レイテンシーを考慮すること

マルチプレイヤー機能とソーシャル機能ではレイテンシーの基準が異なるため、レイテンシーも考慮する必要があります。マルチプレイヤーゲームでは、ゲームステートを確保し、プレイヤーの入力を配信するため、業界標準は20ms以下です。一方、チャットアプリケーションの場合、チャットメッセージの配信の最大レイテンシーは250msです。つまり、オンラインゲームのリアルタイム・メッセージングには、2つの異なるタイプがあり、2つの異なる標準があります。それぞれを単独で運用することで、必要なものに応じて管理することができます。

**TCP または UDP プロトコルのどちらを使用しても、新しいソーシャル機能を簡単に追加できます。**
-----------------------------------------------------

スタンドアロンサービスとしてチャットを実行し、業界標準のネットワークプロトコル[（XMPP](https://www.pubnub.com/learn/glossary/what-is-xmpp/)、[WebSocket](https://www.pubnub.com/guides/what-are-websockets-and-when-should-you-use-them/)、[ngrok](https://www.pubnub.com/guides/what-is-ngrok/)）またはホストされたサービス（PubNub）を選択すると、簡単に新しい強力なソーシャル機能を追加する機会を開きます。

コアチャットから始めて、ユーザーが個別チャットやグループチャットができるようにします。これによって、基本的な[パブリッシュ/サブスクライブだけ](https://www.pubnub.com/guides/everything-you-need-to-know-about-pub-sub/)でなく、基盤となるインフラを手に入れることができ、その上に簡単に構築できる他のソーシャル機能がたくさんあります。最小限のコードで、タイピングインジケーター、どのプレイヤーがオンラインかオフラインかを示すプレゼンス、未読メッセージカウンターのようなテーブルステークチャット機能を追加することができます。

**TCPとUDP：今後の展望**
-----------------

大小のゲームアプリがこのアーキテクチャ設計に移行しています。 [ポケットジェム](https://www.pubnub.com/customers/pocket-gems/)や、最近では [EVE Online](https://www.eveonline.com/article/p4i0qx/new-chat-backend-coming-with-the-march-release).より優れたスケーラビリティ、フロー制御、より効率的なパフォーマンスから、単一のスタックにロックされることなく自由にイノベーションを起こすことができるまで、その利点は明らかです。

_PubNubチャットを使用_すれば、 _堅牢なソーシャル機能の基盤として_ [_ゲーム内チャットを_](https://www.pubnub.com/industry/gaming/)_簡単に_ [_実装_](https://www.pubnub.com/industry/gaming/)することができ、 _ソーシャルインフラのスケーリングやメンテナンスの手間を省き、ゲームのコア開発に集中する_ことができます。

#### **_参考文献_**

-   [_マルチプレイヤーゲームプログラミング入門_](https://hub.packtpub.com/getting-started-multiplayer-game-programming/)
    
-   [_EVE Onlineにおけるチャットアーキテクチャの分析とリファクタリング_](http://uu.diva-portal.org/smash/get/diva2:408940/FULLTEXT01.pdf)
    

PubNubはどのようにお役に立ちますか？
=====================

この記事は[PubNub.comに](https://pubnub.com/blog/tcp-vs-udp/)掲載されたものです。

PubNubのプラットフォームは、開発者がWebアプリ、モバイルアプリ、IoTデバイス向けにリアルタイムのインタラクティブ機能を構築、提供、管理できるように支援します。

私たちのプラットフォームの基盤は、業界最大かつ最もスケーラブルなリアルタイムエッジメッセージングネットワークです。世界15か所以上で8億人の月間アクティブユーザーをサポートし、99.999%の信頼性を誇るため、停電や同時実行数の制限、トラフィックの急増による遅延の問題を心配する必要はありません。

PubNubを体験
---------

[ライブツアーを](https://www.pubnub.com/tour/introduction/)チェックして、5分以内にすべてのPubNub搭載アプリの背後にある本質的な概念を理解する

セットアップ
------

[PubNubアカウントに](https://admin.pubnub.com/signup/)サインアップすると、PubNubキーに無料ですぐにアクセスできます。

始める
---

[PubNubのドキュメントは](https://www.pubnub.com/docs)、ユースケースや[SDKに](https://www.pubnub.com/docs)関係なく、あなたを立ち上げ、実行することができます。