© KLab Inc. 2022
モバイルオンラインゲームでの大規模観
戦とチート対策
© KLab Inc. 2022
自社製リアルタイム通信システム
「WSNet2」
OSSとして公開しました
https://github.com/KLab/wsnet2
告知
© KLab Inc. 2022
今日のお話
● 自己紹介・会社紹介
● WSNet2の紹介
● なぜ自社開発したか
● 数万人規模の観戦への対応
● チート対策の工夫
© KLab Inc. 2022
自己紹介
牧内大輔
KLab株式会社 エンジニアリング本部サーバサイドG
対外発表
● Go Conference
■ 「型パラメータが使えるようになったのでLINQを実装してみた」 他
OSS
● EMLauncher (https://github.com/KLab/emlauncher)
● gozxing (https://github.com/makiuchi-d/gozixing) 他
© KLab Inc. 2022
ミッション:「世界と自分をワクワクさせろ」
ビジョン:「エンターテインメントで、世界中のユーザーをひとつにつなげる」
社会に感動と喜びを提供できるような、サービス・技術を創造しています。
設立 2000年8月1日
資本金 53億6364万円(2022年10月末現在)
株式公開市場 東京証券取引所・プライム市場(3656)
代表者
代表取締役社長CEO 森田 英克
代表取締役副会長 五十嵐洋介
所在地
本社(東京都港区、六本木ヒルズ森タワー)
大阪事業所、福岡事業所、仙台事業所
主要関連会社 株式会社BLOCKSMITH&Co. 株式会社グローバルギア
海外拠点 可来软件开发(上海)有限公司 (KLab China Inc.)
グループ従業員数 正社員 553名(2022年9月末時点)
主力:ゲーム事業
アニメ、コミック、ゲームなど、世界中で
人気の高いIPを原作とした
モバイルオンラインゲームを国内外に展開。
現在155の国と地域で配信
その他:
スマートフォン関連のアプリケーション、
サービス及びサーバーインフラの企画、
開発、提供、新規事業開拓など
会社紹介:KLab株式会社(クラブ)
© KLab Inc. 2022
WSNet2の紹介
© KLab Inc. 2022
● 常時接続、クライアント同士が双方向通信
● 同じステージ(部屋)を同時に遊ぶ
■ オンライン対戦、協力プレイなど
リアルタイム通信とは
ステージ
© KLab Inc. 2022
※PhotonはExit Gamesの製品です
©久保帯人/集英社・テレビ東京・dentsu・ぴえろ ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム ©KLabGames
リアルタイム通信の利用
Photon (PUN)※
その他自社製
WSNet
(WSNet2の前身)
© KLab Inc. 2022
● サーバを介してメッセージを同期
● 特徴
○ WebSocketベース
○ C#クライアントライブラリ
■ (Unity/.NET)
○ 自動再接続、メッセージ再送
○ 柔軟な部屋検索
○ 数十万人規模の観戦
WSNet2について
© KLab Inc. 2022
● 向いているゲーム
○ パズルゲーム、戦略ゲームなど
■ メッセージの順序や整合性を重視するもの
● 向いていないゲーム
○ アクションゲームなど
■ 処理順序よりもリアルタイム性を重視するもの
WSNet2について
© KLab Inc. 2022
なぜ自社開発したか
© KLab Inc. 2022
なぜ自社開発したか
● 技術的な挑戦
■ 自社でも技術をもっておきたい
● モバイルオンラインゲームでの課題
■ 一時的な切断への対応
■ 複雑な検索条件での入室
© KLab Inc. 2022
● モバイル端末では一時的な切断がよくある
○ WiFi・モバイル回線の切り替わり
○ トンネル・地下鉄などの一時的な圏外
課題:一時的な切断
© KLab Inc. 2022
● モバイル端末では一時的な切断がよくある
○ WiFi・モバイル回線の切り替わり
○ トンネル・地下鉄などの一時的な圏外
課題:一時的な切断
ネットワークから切断しました
この試合は敗北になります
通信エラー
OK
© KLab Inc. 2022
接続で入室、切断したら退室
● サーバの実装がシンプル
● 一時的な切断で退室してしまう
■ 再入室できたとしても退室中のメッセージが欠落
よくある実装
入室 退室 再入室 退室
© KLab Inc. 2022
● 入室状態と接続状態を別々に管理
■ 切断しても退室にしない
■ 切断中のメッセージは再接続時に再送
■ ゲームアプリは切断・再接続を感知しない
WSNet2の実装
接続 切断 再接続 切断
入室 退室
再送
退室リクエスト
入室成功
© KLab Inc. 2022
● 柔軟なマッチメイキング
■ ゲーム仕様に合わせた条件指定
○ 例:パラメータが近い(範囲指定)
○ 例:募集開始1分以内はフレンドのみ、以降は誰でも
● 観戦のための検索
■ すでにマッチング済みの部屋の検索
課題:複雑な検索条件での入室
© KLab Inc. 2022
部屋一覧を取得してクライアント側で選択
● クライアントの負荷が高い
● 通信量が多い
● 2回リクエストが必要
よくある実装その1
Real
time
Room 入室
© KLab Inc. 2022
部屋の状態をAPIサーバに同期
APIサーバで部屋を決定
● 構成が複雑
● 同期のタイムラグ
● 2回リクエストが必要
よくある実装その2
API
Room 入室
Real
time
Room
© KLab Inc. 2022
回線速度・端末スペックによる有利不利
● 椅子取りゲームなマッチング
■ 報酬の良いステージなど
● 早い端末が埋めてしまう
■ 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
Room
© KLab Inc. 2022
回線速度・端末スペックによる有利不利
● 椅子取りゲームなマッチング
■ 報酬の良いステージなど
● 早い端末が埋めてしまう
■ 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
Room
© KLab Inc. 2022
回線速度・端末スペックによる有利不利
● 椅子取りゲームなマッチング
■ 報酬の良いステージなど
● 早い端末が埋めてしまう
■ 遅い端末は入れない
2回リクエストの弊害
Room
Room
Room
© KLab Inc. 2022
回線速度・端末スペックによる有利不利
● 椅子取りゲームなマッチング
■ 報酬の良いステージなど
● 早い端末が埋めてしまう
■ 遅い端末は入れない
2回リクエストの弊害
Room
© KLab Inc. 2022
● なぜ2回必要だったか
■ 複雑な検索条件を実現するため
● 複雑な検索と入室を1リクエストで完結したい
■ 公平なマッチメイキング
2回リクエストの弊害
© KLab Inc. 2022
● 1リクエストで検索から入室まで可能に
■ 接続を待たずに入室確定
■ 複雑な条件での検索に対応
○ 「KLabTechBook Vol.9」で少し紹介
○ https://www.klab.com/jp/blog/tech/2022/tbf12.html
○ 電子版無料頒布中
WSNet2の実装
© KLab Inc. 2022
モバイルオンラインゲームでの課題
● 一時的な切断への対応
■ 自動再接続とメッセージの再送
● 複雑な検索条件での入室
■ 複雑な条件の指定に対応
■ 1リクエストで検索から入室まで可能に
まとめ:なぜ自社開発したか
© KLab Inc. 2022
大規模観戦への対応
© KLab Inc. 2022
eスポーツへの取り組み
キャプテン翼〜たたかえドリームチーム〜
世界大会「Dream Championship」
● 2019年より毎年開催
● 2022年
■ 12/10(土)〜11(日)
■ 決勝トーナメント開催予定
©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム ©KLabGames
© KLab Inc. 2022
● eスポーツでは観戦も重要
● 数万〜数十万人規模の観戦を実現したい
よくある実現方法
● 動画配信サービスの利用
● 観戦クライアントも部屋に接続
大規模観戦
© KLab Inc. 2022
● メリット
■ 百万人を越える同時視聴が可能
■ 様々な環境で観戦できる
● デメリット
■ 遅延がある
■ 一方向の配信
動画配信サービスの利用
Room
© KLab Inc. 2022
● メリット
■ 双方向通信
■ 遅延なし
● デメリット
■ 接続数が限られる
○ 数百人が限度
■ アプリからしか接続できない
観戦クライアントも部屋に接続
Room
© KLab Inc. 2022
● 観戦クライアントも部屋に接続
● Hubサーバ経由の接続もサポート
■ 部屋への接続数を抑制
■ 双方向通信
WSNet2での大規模観戦
Hub
Hub
Room
© KLab Inc. 2022
部屋とクライアントで特別処理なし
● 部屋サーバとの接続
■ 観戦クライアントとして入室
● クライアントとの接続
■ 部屋サーバのように待ち受け
■ クライアントは部屋同様に観戦入室
Hubサーバの仕組み
Hub
観戦入室
観戦入室 観戦入室
Room
© KLab Inc. 2022
● 同時1万部屋20万観戦を達成
■ 部屋サーバ
○ c5.xlarge 5台 (vCPU 4論理コア@3GHz、メモリ 8GiB)
▫ 約2000部屋/台 (3クライアント/部屋)
▫ 約6000クライアント/台
■ Hubサーバ
○ c5.xlarge 35台
▫ 約5800クライアント/台
負荷試験結果
© KLab Inc. 2022
Hubサーバ経由の接続もサポート
● 双方向通信を維持
● 数十万人規模にも対応
● 部屋とクライアントはシンプルなまま
まとめ:大規模観戦への対応
© KLab Inc. 2022
チート対策の工夫
© KLab Inc. 2022
今日紹介する工夫
● ユーザ認証
● サーバサイドゲームロジック
チート対策の工夫
© KLab Inc. 2022
● 防ぎたいチート
■ 他ユーザへのなりすまし
■ botによる接続
● 実装の課題
■ WSNet2は独立したシステム
■ APIサーバと同じユーザ認証をしたい
ユーザ認証
© KLab Inc. 2022
APIサーバからユーザ情報を同期
1. ログインAPI呼び出し
■ ユーザ情報を伝える
2. 入室リクエスト
■ ユーザ情報を使って認証
よくある実装その1
API
Real
time
Login
User
© KLab Inc. 2022
APIサーバからユーザ情報を同期
1. ログインAPI呼び出し
■ ユーザ情報を伝える
2. 入室リクエスト
■ ユーザ情報を使って認証
よくある実装その1
API
入室
Real
time
User
© KLab Inc. 2022
APIサーバからユーザ情報を同期
● 問題点
■ ユーザ情報の保存が必要
よくある実装その1
API
入室
Real
time
User
© KLab Inc. 2022
アクセス時にAPIサーバに問い合わせ
1. 入室リクエスト
2. APIサーバに問い合わせ
■ APIサーバが認証
よくある実装その2
API
Real
time
入室
問い合わせ
© KLab Inc. 2022
アクセス時にAPIサーバに問い合わせ
● 問題点
■ 入室に時間がかかる
よくある実装その2
API
Real
time
入室
問い合わせ
© KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
■ 鍵でハッシュを付加
3. 認証情報を付けて入室
■ 鍵で認証情報を検証
WSNet2での実装
API
Real
time
© KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
■ 鍵でハッシュを付加
3. 認証情報を付けて入室
■ 鍵で認証情報を検証
WSNet2での実装
API
Real
time
Auth
Data
© KLab Inc. 2022
APIサーバと通信しない方法
1. 事前に共通鍵を配置
2. 認証情報要求
■ 鍵でハッシュを付加
3. 認証情報を付けて入室
■ 鍵で認証情報を検証
WSNet2での実装
API
Real
time
入室
Auth
Data
© KLab Inc. 2022
APIサーバと通信しない方法
● 認証情報が正しいかで判定
■ APIサーバで生成したもの
■ APIサーバで認証済み
WSNet2での実装
API
Real
time
入室
Auth
Data
© KLab Inc. 2022
● ユーザ情報の保存が不要
● 入室時にAPI通信も不要
● APIサーバで認証されたことを確認できる
WSNet2での認証
© KLab Inc. 2022
今日紹介する工夫
● ユーザ認証
● サーバサイドゲームロジック
チート対策の工夫
© KLab Inc. 2022
● クライアントのロジック改ざん
■ 他のプレイヤーにも影響
● サーバサイドは改ざんされない
アプリ改ざんによるチート
Logic
© KLab Inc. 2022
● クライアントのロジック改ざん
■ 他のプレイヤーにも影響
● サーバサイドは改ざんされない
アプリ改ざんによるチート
Logic
?
© KLab Inc. 2022
● 防ぎたいチート
■ アプリ改ざんによるゲームロジック改ざん
● 実装の課題
■ ロジックコードの二重管理を避けたい
○ オフラインプレイと同じ実装を使いたい
■ 独自サーバの実装は大変
サーバサイドゲームロジック
© KLab Inc. 2022
● ロジックプログラムが直接接続を受け付ける
課題
● 実装が大変
■ 接続管理を自前実装
○ WSNet2等が解決している部分
よくある実装:独自サーバ
Logic
© KLab Inc. 2022
● ロジックプログラムもクライアント
■ ゲームマスター役のクライアント
■ プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
© KLab Inc. 2022
● ロジックプログラムもクライアント
■ ゲームマスター役のクライアント
■ プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
© KLab Inc. 2022
● ロジックプログラムもクライアント
■ ゲームマスター役のクライアント
■ プレイヤーと同様に入室
処理の流れ
1. プレイヤーは入力をマスターに送信
2. 処理結果を全プレイヤーに送信
マスタークライアント方式
Master
Room
© KLab Inc. 2022
● リアルタイム通信システムを利用できる
■ 接続管理・通信まわりを任せられる
● クライアントアプリと同じコードを使いやすい
■ 通信の実装方法はクライアントアプリと同じ
■ 同じ言語、同じライブラリが使える
マスタークライアント方式の利点
© KLab Inc. 2022
● .NETアプリとして実装できる
○ Unityヘッドレスモードより省オーバーヘッド
○ C#なのでUnityと同一のコードを利用できる
● 通信遅延を減らせる
○ WSNet2と近い場所で実行できる
■ AWSの同一リージョンなど
WSNet2での利点
© KLab Inc. 2022
● ユーザ認証
■ APIサーバと通信しない方法
● サーバサイドゲームロジック
■ マスタークライアント方式
まとめ:チート対策の工夫
© KLab Inc. 2022
まとめ
© KLab Inc. 2022
● なぜ自社開発したか
■ 自動再接続による一時的な切断への対応
■ 複雑な検索条件でも1リクエストで入室
● 大規模観戦への対応
■ Hubサーバ経由の接続のサポート
● チート対策の工夫
■ APIサーバと通信しないユーザ認証
■ マスタークライアント方式のサーバサイドゲームロジック
まとめ
© KLab Inc. 2022
● 話せなかったこと
○ WSNet2サーバの内部実装、負荷対策
○ C#クライアントライブラリの工夫
○ 独自シリアライズフォーマット
○ 通信改ざん対策
○ ロギング
○ 部屋情報閲覧ツール
まとめ

More Related Content

PDF
実践イカパケット解析
PDF
大規模サービスを支えるネットワークインフラの全貌
PDF
Epic Online Services でできること
PDF
TLS, HTTP/2演習
PDF
The Usage and Patterns of MagicOnion
PDF
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
PDF
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
PDF
Azureを頑張る理由と頑張り方(Cloud Skills Challenge 2022 winter 発表資料)
実践イカパケット解析
大規模サービスを支えるネットワークインフラの全貌
Epic Online Services でできること
TLS, HTTP/2演習
The Usage and Patterns of MagicOnion
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
サーバー知識不要!のゲームサーバー "Azure PlayFab" で長期運営タイトルを作ろう
Azureを頑張る理由と頑張り方(Cloud Skills Challenge 2022 winter 発表資料)

What's hot (20)

PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PPTX
OpenVRやOpenXRの基本的なことを調べてみた
PDF
フロー効率性とリソース効率性、再入門 #devlove #devkan
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
PDF
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
PDF
[AKIBA.AWS] VGWのルーティング仕様
PDF
マイクロサービスに至る歴史とこれから - XP祭り2021
PDF
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
PDF
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
PDF
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
PDF
オンラインゲームの仕組みと工夫
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
PDF
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
PPTX
Unity3D Programming
PDF
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
PPTX
シェーダー伝道師 第一回
PDF
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
PPTX
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
PDF
Google Cloud で実践する SRE
ネットワーク ゲームにおけるTCPとUDPの使い分け
OpenVRやOpenXRの基本的なことを調べてみた
フロー効率性とリソース効率性、再入門 #devlove #devkan
メルカリ・ソウゾウでは どうGoを活用しているのか?
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
[AKIBA.AWS] VGWのルーティング仕様
マイクロサービスに至る歴史とこれから - XP祭り2021
Stargz Snapshotter: イメージのpullを省略しcontainerdでコンテナを高速に起動する
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
オンラインゲームの仕組みと工夫
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity3D Programming
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
シェーダー伝道師 第一回
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
Google Cloud で実践する SRE
Ad

Similar to モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜 (20)

PPTX
サーバーレスで ガチ本番運用までやってるお話し
PDF
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
PDF
【NGINXセミナー】 NGINXのWAFとは?その使い方と設定方法 解説セミナー
PDF
VMwareとIBMクラウドの提携で広がるハイブリッド・クラウドの世界
PDF
【NGINXセミナー】API ゲートウェイとしてのNGINX Plus活用方法
PDF
VMware が考えるコンテナと Kubernetes の世界
PDF
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
PDF
2012-08-28 アカデミッククラウドシンポジウム(公開版)「クライアント向け仮想化ソフトウェアBitVisorのクラウドへの応用」
PDF
20140404 vyatta users Group / REST API解説
PDF
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
PDF
NGINX & OpenShift Webinar for Energy Sector
PDF
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
PDF
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
PPTX
IIJ GIOアカデミー / ハイブリッドクラウド(基礎編)
 
PPTX
Azure Service Fabric Cluster の作成
PDF
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
PPTX
私がなぜZscalerに?
PDF
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
PDF
「小さくはじめる→成功する→全体最適へ→成功する」が黄金ルール
PDF
S&B Summit2015 SOFTLAYERクラウドデザインパターン
サーバーレスで ガチ本番運用までやってるお話し
[Cloud Native Days Tokyo 2022] たまにはオンプレもいいぞ? GKE と Armadillo IoT で実現する ハイフ...
【NGINXセミナー】 NGINXのWAFとは?その使い方と設定方法 解説セミナー
VMwareとIBMクラウドの提携で広がるハイブリッド・クラウドの世界
【NGINXセミナー】API ゲートウェイとしてのNGINX Plus活用方法
VMware が考えるコンテナと Kubernetes の世界
[VMware Partner Exchange Tokyo 14Apr2014] ネットアップセッション資料
2012-08-28 アカデミッククラウドシンポジウム(公開版)「クライアント向け仮想化ソフトウェアBitVisorのクラウドへの応用」
20140404 vyatta users Group / REST API解説
ネットワーク仮想化ソフトウェアMidoNet ユースケースとユーザメリット
NGINX & OpenShift Webinar for Energy Sector
Azure Cosmos DB Emulator on Docker を GitHub Codespaces で動かす!
どっちの VS ショー / 伝統の Visual Studio 2019、人気の Visual Studio Code
IIJ GIOアカデミー / ハイブリッドクラウド(基礎編)
 
Azure Service Fabric Cluster の作成
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
私がなぜZscalerに?
「クラウド移行をめぐるウソ・ホント」 オンプレのVMwareからの切替は大変?P2V2Cの具体的な事例を紹介
「小さくはじめる→成功する→全体最適へ→成功する」が黄金ルール
S&B Summit2015 SOFTLAYERクラウドデザインパターン
Ad

More from KLab Inc. / Tech (20)

PDF
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
PDF
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
PDF
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
PDF
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
PDF
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
PDF
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
PDF
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
PDF
生成AIが切り拓く新しいゲームの創り方・遊び方
PDF
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
PDF
他業界からゲーム業界へ転向したときの話
PDF
KLabのゲーム開発を支える開発環境
PDF
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
PDF
「リアルISUCON」としてのモバイルオンラインゲーム開発
PDF
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
PDF
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
PDF
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
PPTX
KLabのチャットシステム インフラ変遷
PPTX
Ganglia のUIにGrafanaを追加する話
PPTX
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
PPTX
属人化して詰まってた作業を自動化で楽しようとした話
【公開用】モバイルオンラインゲーム開発を支える早く、安く、使いやすいサーバインフラ構築
モバイルオンラインゲームのアプリ外課金の導入と運用方法について
デバイスファーム 「AirLab」 による 自動QAテストの実績と機械学習が拓く次世代QAの可能性
2024年5月17日 先駆的科学計算フォーラム2024 機械学習を用いた新たなゲーム体験の創出の応用
大規模モバイルオンラインゲーム開発における チーム組成とワークフロー最適化
運用中の大規模オンラインゲームで 8年ぶりにPHPバージョンアップをした話
AirLab導入でテストコストの大幅削減と品質向上! 数十台の端末を一斉に全自動テストできる社内DeviceFarmについてご紹介
生成AIが切り拓く新しいゲームの創り方・遊び方
表も裏もすべて見せます! KLab謹製大規模オンラインゲームの リアルタイムチャットマイクロサービス
他業界からゲーム業界へ転向したときの話
KLabのゲーム開発を支える開発環境
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
「リアルISUCON」としてのモバイルオンラインゲーム開発
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
KLabのチャットシステム インフラ変遷
Ganglia のUIにGrafanaを追加する話
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
属人化して詰まってた作業を自動化で楽しようとした話

Recently uploaded (7)

PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
Working as an OSS Developer at Ruby Association Activity Report 2025
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。

モバイルオンラインゲームでの大規模観戦とチート対策 〜自社製リアルタイム通信システム「WSNet2」の事例〜

  • 1. © KLab Inc. 2022 モバイルオンラインゲームでの大規模観 戦とチート対策
  • 2. © KLab Inc. 2022 自社製リアルタイム通信システム 「WSNet2」 OSSとして公開しました https://github.com/KLab/wsnet2 告知
  • 3. © KLab Inc. 2022 今日のお話 ● 自己紹介・会社紹介 ● WSNet2の紹介 ● なぜ自社開発したか ● 数万人規模の観戦への対応 ● チート対策の工夫
  • 4. © KLab Inc. 2022 自己紹介 牧内大輔 KLab株式会社 エンジニアリング本部サーバサイドG 対外発表 ● Go Conference ■ 「型パラメータが使えるようになったのでLINQを実装してみた」 他 OSS ● EMLauncher (https://github.com/KLab/emlauncher) ● gozxing (https://github.com/makiuchi-d/gozixing) 他
  • 5. © KLab Inc. 2022 ミッション:「世界と自分をワクワクさせろ」 ビジョン:「エンターテインメントで、世界中のユーザーをひとつにつなげる」 社会に感動と喜びを提供できるような、サービス・技術を創造しています。 設立 2000年8月1日 資本金 53億6364万円(2022年10月末現在) 株式公開市場 東京証券取引所・プライム市場(3656) 代表者 代表取締役社長CEO 森田 英克 代表取締役副会長 五十嵐洋介 所在地 本社(東京都港区、六本木ヒルズ森タワー) 大阪事業所、福岡事業所、仙台事業所 主要関連会社 株式会社BLOCKSMITH&Co. 株式会社グローバルギア 海外拠点 可来软件开发(上海)有限公司 (KLab China Inc.) グループ従業員数 正社員 553名(2022年9月末時点) 主力:ゲーム事業 アニメ、コミック、ゲームなど、世界中で 人気の高いIPを原作とした モバイルオンラインゲームを国内外に展開。 現在155の国と地域で配信 その他: スマートフォン関連のアプリケーション、 サービス及びサーバーインフラの企画、 開発、提供、新規事業開拓など 会社紹介:KLab株式会社(クラブ)
  • 6. © KLab Inc. 2022 WSNet2の紹介
  • 7. © KLab Inc. 2022 ● 常時接続、クライアント同士が双方向通信 ● 同じステージ(部屋)を同時に遊ぶ ■ オンライン対戦、協力プレイなど リアルタイム通信とは ステージ
  • 8. © KLab Inc. 2022 ※PhotonはExit Gamesの製品です ©久保帯人/集英社・テレビ東京・dentsu・ぴえろ ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム ©KLabGames リアルタイム通信の利用 Photon (PUN)※ その他自社製 WSNet (WSNet2の前身)
  • 9. © KLab Inc. 2022 ● サーバを介してメッセージを同期 ● 特徴 ○ WebSocketベース ○ C#クライアントライブラリ ■ (Unity/.NET) ○ 自動再接続、メッセージ再送 ○ 柔軟な部屋検索 ○ 数十万人規模の観戦 WSNet2について
  • 10. © KLab Inc. 2022 ● 向いているゲーム ○ パズルゲーム、戦略ゲームなど ■ メッセージの順序や整合性を重視するもの ● 向いていないゲーム ○ アクションゲームなど ■ 処理順序よりもリアルタイム性を重視するもの WSNet2について
  • 11. © KLab Inc. 2022 なぜ自社開発したか
  • 12. © KLab Inc. 2022 なぜ自社開発したか ● 技術的な挑戦 ■ 自社でも技術をもっておきたい ● モバイルオンラインゲームでの課題 ■ 一時的な切断への対応 ■ 複雑な検索条件での入室
  • 13. © KLab Inc. 2022 ● モバイル端末では一時的な切断がよくある ○ WiFi・モバイル回線の切り替わり ○ トンネル・地下鉄などの一時的な圏外 課題:一時的な切断
  • 14. © KLab Inc. 2022 ● モバイル端末では一時的な切断がよくある ○ WiFi・モバイル回線の切り替わり ○ トンネル・地下鉄などの一時的な圏外 課題:一時的な切断 ネットワークから切断しました この試合は敗北になります 通信エラー OK
  • 15. © KLab Inc. 2022 接続で入室、切断したら退室 ● サーバの実装がシンプル ● 一時的な切断で退室してしまう ■ 再入室できたとしても退室中のメッセージが欠落 よくある実装 入室 退室 再入室 退室
  • 16. © KLab Inc. 2022 ● 入室状態と接続状態を別々に管理 ■ 切断しても退室にしない ■ 切断中のメッセージは再接続時に再送 ■ ゲームアプリは切断・再接続を感知しない WSNet2の実装 接続 切断 再接続 切断 入室 退室 再送 退室リクエスト 入室成功
  • 17. © KLab Inc. 2022 ● 柔軟なマッチメイキング ■ ゲーム仕様に合わせた条件指定 ○ 例:パラメータが近い(範囲指定) ○ 例:募集開始1分以内はフレンドのみ、以降は誰でも ● 観戦のための検索 ■ すでにマッチング済みの部屋の検索 課題:複雑な検索条件での入室
  • 18. © KLab Inc. 2022 部屋一覧を取得してクライアント側で選択 ● クライアントの負荷が高い ● 通信量が多い ● 2回リクエストが必要 よくある実装その1 Real time Room 入室
  • 19. © KLab Inc. 2022 部屋の状態をAPIサーバに同期 APIサーバで部屋を決定 ● 構成が複雑 ● 同期のタイムラグ ● 2回リクエストが必要 よくある実装その2 API Room 入室 Real time Room
  • 20. © KLab Inc. 2022 回線速度・端末スペックによる有利不利 ● 椅子取りゲームなマッチング ■ 報酬の良いステージなど ● 早い端末が埋めてしまう ■ 遅い端末は入れない 2回リクエストの弊害 Room Room Room Room
  • 21. © KLab Inc. 2022 回線速度・端末スペックによる有利不利 ● 椅子取りゲームなマッチング ■ 報酬の良いステージなど ● 早い端末が埋めてしまう ■ 遅い端末は入れない 2回リクエストの弊害 Room Room Room Room
  • 22. © KLab Inc. 2022 回線速度・端末スペックによる有利不利 ● 椅子取りゲームなマッチング ■ 報酬の良いステージなど ● 早い端末が埋めてしまう ■ 遅い端末は入れない 2回リクエストの弊害 Room Room Room
  • 23. © KLab Inc. 2022 回線速度・端末スペックによる有利不利 ● 椅子取りゲームなマッチング ■ 報酬の良いステージなど ● 早い端末が埋めてしまう ■ 遅い端末は入れない 2回リクエストの弊害 Room
  • 24. © KLab Inc. 2022 ● なぜ2回必要だったか ■ 複雑な検索条件を実現するため ● 複雑な検索と入室を1リクエストで完結したい ■ 公平なマッチメイキング 2回リクエストの弊害
  • 25. © KLab Inc. 2022 ● 1リクエストで検索から入室まで可能に ■ 接続を待たずに入室確定 ■ 複雑な条件での検索に対応 ○ 「KLabTechBook Vol.9」で少し紹介 ○ https://www.klab.com/jp/blog/tech/2022/tbf12.html ○ 電子版無料頒布中 WSNet2の実装
  • 26. © KLab Inc. 2022 モバイルオンラインゲームでの課題 ● 一時的な切断への対応 ■ 自動再接続とメッセージの再送 ● 複雑な検索条件での入室 ■ 複雑な条件の指定に対応 ■ 1リクエストで検索から入室まで可能に まとめ:なぜ自社開発したか
  • 27. © KLab Inc. 2022 大規模観戦への対応
  • 28. © KLab Inc. 2022 eスポーツへの取り組み キャプテン翼〜たたかえドリームチーム〜 世界大会「Dream Championship」 ● 2019年より毎年開催 ● 2022年 ■ 12/10(土)〜11(日) ■ 決勝トーナメント開催予定 ©高橋陽一/集英社 ©高橋陽一/集英社・テレビ東京・エノキフィルム ©KLabGames
  • 29. © KLab Inc. 2022 ● eスポーツでは観戦も重要 ● 数万〜数十万人規模の観戦を実現したい よくある実現方法 ● 動画配信サービスの利用 ● 観戦クライアントも部屋に接続 大規模観戦
  • 30. © KLab Inc. 2022 ● メリット ■ 百万人を越える同時視聴が可能 ■ 様々な環境で観戦できる ● デメリット ■ 遅延がある ■ 一方向の配信 動画配信サービスの利用 Room
  • 31. © KLab Inc. 2022 ● メリット ■ 双方向通信 ■ 遅延なし ● デメリット ■ 接続数が限られる ○ 数百人が限度 ■ アプリからしか接続できない 観戦クライアントも部屋に接続 Room
  • 32. © KLab Inc. 2022 ● 観戦クライアントも部屋に接続 ● Hubサーバ経由の接続もサポート ■ 部屋への接続数を抑制 ■ 双方向通信 WSNet2での大規模観戦 Hub Hub Room
  • 33. © KLab Inc. 2022 部屋とクライアントで特別処理なし ● 部屋サーバとの接続 ■ 観戦クライアントとして入室 ● クライアントとの接続 ■ 部屋サーバのように待ち受け ■ クライアントは部屋同様に観戦入室 Hubサーバの仕組み Hub 観戦入室 観戦入室 観戦入室 Room
  • 34. © KLab Inc. 2022 ● 同時1万部屋20万観戦を達成 ■ 部屋サーバ ○ c5.xlarge 5台 (vCPU 4論理コア@3GHz、メモリ 8GiB) ▫ 約2000部屋/台 (3クライアント/部屋) ▫ 約6000クライアント/台 ■ Hubサーバ ○ c5.xlarge 35台 ▫ 約5800クライアント/台 負荷試験結果
  • 35. © KLab Inc. 2022 Hubサーバ経由の接続もサポート ● 双方向通信を維持 ● 数十万人規模にも対応 ● 部屋とクライアントはシンプルなまま まとめ:大規模観戦への対応
  • 36. © KLab Inc. 2022 チート対策の工夫
  • 37. © KLab Inc. 2022 今日紹介する工夫 ● ユーザ認証 ● サーバサイドゲームロジック チート対策の工夫
  • 38. © KLab Inc. 2022 ● 防ぎたいチート ■ 他ユーザへのなりすまし ■ botによる接続 ● 実装の課題 ■ WSNet2は独立したシステム ■ APIサーバと同じユーザ認証をしたい ユーザ認証
  • 39. © KLab Inc. 2022 APIサーバからユーザ情報を同期 1. ログインAPI呼び出し ■ ユーザ情報を伝える 2. 入室リクエスト ■ ユーザ情報を使って認証 よくある実装その1 API Real time Login User
  • 40. © KLab Inc. 2022 APIサーバからユーザ情報を同期 1. ログインAPI呼び出し ■ ユーザ情報を伝える 2. 入室リクエスト ■ ユーザ情報を使って認証 よくある実装その1 API 入室 Real time User
  • 41. © KLab Inc. 2022 APIサーバからユーザ情報を同期 ● 問題点 ■ ユーザ情報の保存が必要 よくある実装その1 API 入室 Real time User
  • 42. © KLab Inc. 2022 アクセス時にAPIサーバに問い合わせ 1. 入室リクエスト 2. APIサーバに問い合わせ ■ APIサーバが認証 よくある実装その2 API Real time 入室 問い合わせ
  • 43. © KLab Inc. 2022 アクセス時にAPIサーバに問い合わせ ● 問題点 ■ 入室に時間がかかる よくある実装その2 API Real time 入室 問い合わせ
  • 44. © KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ■ 鍵でハッシュを付加 3. 認証情報を付けて入室 ■ 鍵で認証情報を検証 WSNet2での実装 API Real time
  • 45. © KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ■ 鍵でハッシュを付加 3. 認証情報を付けて入室 ■ 鍵で認証情報を検証 WSNet2での実装 API Real time Auth Data
  • 46. © KLab Inc. 2022 APIサーバと通信しない方法 1. 事前に共通鍵を配置 2. 認証情報要求 ■ 鍵でハッシュを付加 3. 認証情報を付けて入室 ■ 鍵で認証情報を検証 WSNet2での実装 API Real time 入室 Auth Data
  • 47. © KLab Inc. 2022 APIサーバと通信しない方法 ● 認証情報が正しいかで判定 ■ APIサーバで生成したもの ■ APIサーバで認証済み WSNet2での実装 API Real time 入室 Auth Data
  • 48. © KLab Inc. 2022 ● ユーザ情報の保存が不要 ● 入室時にAPI通信も不要 ● APIサーバで認証されたことを確認できる WSNet2での認証
  • 49. © KLab Inc. 2022 今日紹介する工夫 ● ユーザ認証 ● サーバサイドゲームロジック チート対策の工夫
  • 50. © KLab Inc. 2022 ● クライアントのロジック改ざん ■ 他のプレイヤーにも影響 ● サーバサイドは改ざんされない アプリ改ざんによるチート Logic
  • 51. © KLab Inc. 2022 ● クライアントのロジック改ざん ■ 他のプレイヤーにも影響 ● サーバサイドは改ざんされない アプリ改ざんによるチート Logic ?
  • 52. © KLab Inc. 2022 ● 防ぎたいチート ■ アプリ改ざんによるゲームロジック改ざん ● 実装の課題 ■ ロジックコードの二重管理を避けたい ○ オフラインプレイと同じ実装を使いたい ■ 独自サーバの実装は大変 サーバサイドゲームロジック
  • 53. © KLab Inc. 2022 ● ロジックプログラムが直接接続を受け付ける 課題 ● 実装が大変 ■ 接続管理を自前実装 ○ WSNet2等が解決している部分 よくある実装:独自サーバ Logic
  • 54. © KLab Inc. 2022 ● ロジックプログラムもクライアント ■ ゲームマスター役のクライアント ■ プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 55. © KLab Inc. 2022 ● ロジックプログラムもクライアント ■ ゲームマスター役のクライアント ■ プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 56. © KLab Inc. 2022 ● ロジックプログラムもクライアント ■ ゲームマスター役のクライアント ■ プレイヤーと同様に入室 処理の流れ 1. プレイヤーは入力をマスターに送信 2. 処理結果を全プレイヤーに送信 マスタークライアント方式 Master Room
  • 57. © KLab Inc. 2022 ● リアルタイム通信システムを利用できる ■ 接続管理・通信まわりを任せられる ● クライアントアプリと同じコードを使いやすい ■ 通信の実装方法はクライアントアプリと同じ ■ 同じ言語、同じライブラリが使える マスタークライアント方式の利点
  • 58. © KLab Inc. 2022 ● .NETアプリとして実装できる ○ Unityヘッドレスモードより省オーバーヘッド ○ C#なのでUnityと同一のコードを利用できる ● 通信遅延を減らせる ○ WSNet2と近い場所で実行できる ■ AWSの同一リージョンなど WSNet2での利点
  • 59. © KLab Inc. 2022 ● ユーザ認証 ■ APIサーバと通信しない方法 ● サーバサイドゲームロジック ■ マスタークライアント方式 まとめ:チート対策の工夫
  • 60. © KLab Inc. 2022 まとめ
  • 61. © KLab Inc. 2022 ● なぜ自社開発したか ■ 自動再接続による一時的な切断への対応 ■ 複雑な検索条件でも1リクエストで入室 ● 大規模観戦への対応 ■ Hubサーバ経由の接続のサポート ● チート対策の工夫 ■ APIサーバと通信しないユーザ認証 ■ マスタークライアント方式のサーバサイドゲームロジック まとめ
  • 62. © KLab Inc. 2022 ● 話せなかったこと ○ WSNet2サーバの内部実装、負荷対策 ○ C#クライアントライブラリの工夫 ○ 独自シリアライズフォーマット ○ 通信改ざん対策 ○ ロギング ○ 部屋情報閲覧ツール まとめ