[Rust]クライアントとの通信にSteam Networkingを利用する

2023/07 接続に問題が出るため、現在は使わないよう公式からアナウンスが出ています。

Rustはデフォルトでは、RakNetと呼ばれるネットコードを利用してクライアントと通信をしているが、私の環境では、40名程度がサーバーに参加すると、サーバー全体が不安定になる症状が出た。

プレイヤーがサーバーに参加したタイミングで、トラフィックが大きくスパイクしてしまい、ラグが発生するのだ。

ルーター(RTX830)から見たトラフィックのグラフ。
サーバーから見て上りのLAN IN、WAN OUTのトラフィックが大きく振れている。
Rustのプレイヤーリストの一部。ping値が数千になっているクライアントが多数。一方、少数のクライアントは、正常に通信できている
このような不整脈みたいな波形が出てしまうと、
サーバーはほとんど応答しなくなってしまう。

サーバー上のパケット数の制限値を引き上げたりしてみたが効果なし。

いろいろ設定について調べていたところ、2020年10月「エレベーターアップデート」に興味深い開発者の記事を見つけた。

「RakNetはもうメンテナンスされていないし、脆弱性も我々でパッチしなければならないので、解決策としてSteam Networkingをサポートした」というのだ。RakNetはもう枯れすぎた技術なんでしょうかね…

Steam Networkingは、その名の通りValve社によって開発されたネットコード。オープンソース版もGithubにあるようだ。

通信にSteam Networkingを使用するには、サーバー側に下記の設定が必要。

  • 起動時のオプションに、”-swnet“、”-queryport (クエリー用のポート番号)”を指定
  • ルーター側で-queryportで指定したポート番号の開放

使ってみた感想は、「サーバーに入るのが少し大変だけど、一度サーバーに入れれば快適。トラフィックのグラフも安定してる」といった感じ。

ただしいくつか注意点もある。

  • WebRconやserverinfoコマンドで、ネットワークのトラフィックの情報が表示できなくなる
    常に0が返ってくる。
  • サーバー接続時に、「disconnecting: Entities Out Of Order: expected xxxx, received xxxx」が表示される
    これが厄介。多分Rustのバグなんだけど、Rustの公式Discordにも明確な原因や、解決策が載ってない。
    2か月程度運用した限りだと、拠点が密集しているところでログアウトすると、次回の接続時に起きやすくなる模様。
    下記のことを試したところ、サーバーに入れるようになったという報告がある。
    • 再接続
    • Rustの再起動
    • Steamの再起動
    • PCの再起動
    • Steamworks共通再頒布可能コンポーネントの整合性チェック
    • Rustの整合性チェック
    • 管理者がkillplayerコマンドで当該プレイヤーをキルする

「デフォルトがSteam Networkingに変更されない限り、コミュニティーサーバーではRakNetの使用を勧める」ということだが、公式サーバーでは既に使われているのだろうかねえ。

サーバー参加時の大きなラグで困っている管理者がいたら、試してみてほしい。

コメントを残す

メールアドレスは公開されません


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。