2023/07 接続に問題が出るため、現在は使わないよう公式からアナウンスが出ています。
Rustはデフォルトでは、RakNetと呼ばれるネットコードを利用してクライアントと通信をしているが、私の環境では、40名程度がサーバーに参加すると、サーバー全体が不安定になる症状が出た。
プレイヤーがサーバーに参加したタイミングで、トラフィックが大きくスパイクしてしまい、ラグが発生するのだ。
サーバー上のパケット数の制限値を引き上げたりしてみたが効果なし。
いろいろ設定について調べていたところ、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の使用を勧める」ということだが、公式サーバーでは既に使われているのだろうかねえ。
サーバー参加時の大きなラグで困っている管理者がいたら、試してみてほしい。
最近のコメント