LogoLogo
日本語
日本語
  • Diarkis ヘルプセンター
  • Diarkis の概要
  • 始めよう
    • Diarkis サーバーテンプレート
    • Diarkis クライアント SDK
    • チュートリアル
      • 1. Diarkis サーバーをローカル環境で起動する
      • 2. テストクライアントで疎通確認する
      • 3. カスタムコマンドを実装する
      • Diarkis クライアントからサーバに接続する
    • サンプル
  • Diarkis のモジュール
    • Room モジュール
      • Room モジュールをサーバーでセットアップする
      • Room サンプル
        • room_broadcast
      • Room モジュールをクライアントから利用する
      • Room のその他の機能
    • MatchMaker モジュール
      • MatchMaker モジュールをサーバーでセットアップする
    • Field モジュール
      • Field モジュールをサーバーでセットアップする
    • P2P モジュール
      • P2P モジュールをサーバーでセットアップする
      • P2P サンプル
    • DM (Direct Message) モジュール
      • DM モジュールをサーバーでセットアップする
    • Notifier モジュール
      • Notifier モジュールをサーバーでセットアップする
    • Session モジュール
      • Session モジュールをサーバーでセットアップする
    • Group モジュール
      • Group モジュールをサーバーでセットアップする
  • Diarkis サーバー
    • Diarkis サーバをクラウド環境で起動する
      • AWS
    • Diarkis サーバーを Windows 環境で起動する
    • MARS サーバー
    • UDP サーバー
    • TCP サーバー
    • HTTP サーバー
    • Metrics API
    • サーバー間通信 - Mesh
  • Diarkis クライアント
    • ランタイム・ライブラリ
      • Diarkis RUDP
    • Diarkis Module
      • Diarkis Module の初期化と終了
      • Diarkis Module のカスタイマイズ
      • Diarkis Module のロギング・システム
      • マイグレーション
      • Diarkis のスレッド
    • サンプル
      • C++
        • room_broadcast
        • directmessage_simple
        • group_sample
        • matching_and_turn
        • matchmaker_ticker
        • p2p_rudp_sample
        • session_simple
      • Unreal Engine Plugin
        • FieldWalker
      • Unity Plugin
        • FieldWalker
          • HowToReplicatePosition.md
  • Diarkis ツール
    • Diarkis CLI
      • cgo を利用するプロジェクトをビルドする方法
      • Diarkis CLI v3 への切り替え手順
  • リファレンス
    • API リファレンス
    • リリースノート
      • v1.0
      • v1.0.1
      • v1.0.2
      • v1.0.3
      • v1.0.4
      • v1.0.5
      • v1.0.6
  • サポート
    • ライセンスと購入
GitBook提供
このページ内
  • 概要
  • Diarkis RUDP の仕様
  • Diarkis RUDP の設定
  • RetryInterval の設定
  • RetryMaxCount の設定
  • 順番保証の設定
  • 設定における注意事項

役に立ちましたか?

  1. Diarkis クライアント
  2. ランタイム・ライブラリ

Diarkis RUDP

概要

Reliable User Datagram Protocol (RUDP) はデータの到達が保証されるように実装された UDP 通信です。Diarkis クライアントはサーバーとの通信や P2P 通信において RUDP を用いてデータを送信することができ、ゲームの進行に必要不可欠な情報など重要なデータを確実に相手に届けることができます。このページでは Diarkis の RUDP の仕様と設定について説明します。

Diarkis RUDP の仕様

Diarkis RUDP が確立される組み合わせはサーバー - クライアント間とクライアント - クライアント間 (P2P 通信) があり得ます。一部の機能は P2P 通信でのみ使用が可能です。

Diarkis RUDP ではデータを受信した場合に Acknowledgement (ACK) を返すことでデータが到達したことを相手に知らせます。もし指定した時間以内に ACK の受信が確認できなければ Diarkis クライアントは同じデータを再送します。本ページではこの時間を RetryInterval と呼びます。また、同じデータを指定した回数だけ再送してもなお ACK の受信が確認できなければ、タイムアウトによって Diarkis クライアントは相手との通信を切断します。本ページではこの回数を RetryMaxCount と呼びます。

P2P 通信における RUDP に限りデータの到達保証に加えてデータの順番保証の切り替え機能を提供しています。順番保証機能を有効にすると、アプリケーションが受信するデータの順番が相手ユーザーが送信した順番と一致することが保証されます。Diarkis ライブラリはシーケンシャル番号通りにパケットが受信できるまでアプリケーションにデータを渡しません。順番保証機能を無効にした場合、Diarkis ライブラリはパケットを受信した順番にアプリケーションにデータを渡し、その順番はネットワークの状況や再送パケットの有無によって変わります。

サーバー - クライアント間の RUDP 通信では常に順番保証が有効になります。

Diarkis RUDP の設定

RetryInterval の設定

以下の関数を使用することで RetryInterval を調整することができます。

udp.h
void SetSendRetryInterval(uint32_t minMs, uint32_t maxMs)

RetryInterval は minMs で指定した時間 (ミリ秒) から始まり、クライアントが再送するたびに値が 2 倍になり、maxMs で指定した時間まで上昇します。 例えば minMs=300ms、maxMs=1000ms、RetryMaxCount が 5 回の場合、RetryInterval は 300ms, 600ms, 900ms, 1000ms, 1000ms と変化します。5 回目の再送がタイムアウトした場合クライアントは通信を切断します。

RetryInterval を Exponential に変化させることでクライアントのネットワーク処理負荷を抑えることができます。もし RetryInterval を固定値にしたい場合は minMS と maxMS に同じ値を指定することでRetryInterval を再送回数にかかわらず常に一定にすることができます。

RetryMaxCount の設定

以下の関数を使用することで RetryMaxCount を調整することができます。

udp.h
void SetSendRetryMaxCount(uint32_t count)

RetryMaxCount は count で指定した値になります。

順番保証の設定

DiarkisP2PBase.h
uint16_t SendBroadcast(const uint8_t* payload, size_t payloadSize, RudpType type)
p2p.h
enum RudpType : uint8_t
{
    UNRELIABLE_UNORDERED = 0, // 到達保証なし、順番保証なし (UDP)
    RELIABLE_UNORDERED = 1,   // 到達保証あり、順番保証なし
    RELIABLE_ORDERED = 2      // 到達保証あり、順番保証あり
};

b. ライブラリを直接使用する場合は以下にある P2P 通信のデータ送信関数において bFixedOrder フラグを true にして実行します。

p2p.h
Diarkis::System::Result RSend(const uint8_t* message, size_t messageSize, bool bFixedOrder)

設定における注意事項

  • SetSendRetryInterval と SetSendRetryMaxCount はサーバーとの RUDP 通信に対して設定を行います。P2P 通信における設定は SetSendRetryIntervalP2P と SetSendRetryMaxCountP2P を使用してください。

  • RetryInterval が非常に小さい場合や RetryMaxCount が大きい場合はクライアントは大量のパケットを送信しなければならず、ネットワークの処理負荷が大きくなるのでご注意ください。

前へランタイム・ライブラリ次へDiarkis Module

最終更新 10 か月前

役に立ちましたか?

a. を利用する場合は DiarkisP2PBase.h に定義されている SendBroadcast などの関数が持つ type 引数によって RUDP の動作を制御することができます。type 引数に_列挙型_ RudpType の値を指定してください。

Diarkis Module