本文解説チェックポイントリスト
『オンラインゲームを支える技術 -- 壮大なプレイ空間の舞台裏』
※本リストに登場する会社名、製品名は一般に各社の登録商標または商標です。本リストでは、™、© 、®マークなどは表示しておりません。
第0章:[速習]オンラインゲームプログラミング ——ネットワーク×ゲームプログラミングの技術基礎
- ☑インターネットプログラミング
- ☑IETF
- ☑RFC
- ☑OSI参照モデル
- 物理層
- データリンク層
- ネットワーク層
- トランスポート層
- セッション層
- プレゼンテーション層
- アプリケーション層
- ☑インターネットプログラミング
- ☑IP、UDP、TCP
- ☑コネクション
(STREAM) 志向、コネクションレス (DGRAM) 志向 - ☑交換可能
(な階層化設計) - ☑1Gbit Ethernet
- ☑ソケットAPI
(BSDソケットAPI)、ソケット - ☑書籍
『UNIXネットワークプログラミング』 シリーズ - ☑レイヤ3、レイヤ4
- ☑パケット分割と再構成
- ☑IANA
- ☑/etc/
services - ☑IPv4、IPv6
- ☑ECHOサーバ/ECHOクライアント
- ☑socket( )
- ☑connect( )
- ☑bind( )
- ☑listen( )
- ☑accept( )
- ☑read( )、write( )、send( )、recv( )、sendto( )、recvfrom( )
- ☑shutdown( )
- ☑close( )
- ☑非同期ソケット、非同期ソケットAPI
- ☑スレッド
- ☑select( )
- ☑スレッドのプール
(コラム) - ☑Grand Central Dispatch、ゴルーチン
(コラム)
- ☑Lua、Squirrel、Javascript
- ☑バッファオーバーフローのチェック
- ☑例外オブジェクトの処理
- ☑OSとの入出力を頻繁に行うアプリケーション
(高頻度のI/ O) - ☑GoogleのGo言語
- ☑静的言語、動的言語
- ☑バイトコード
- ☑シングルスレッド、マルチスレッド
- ☑イベント駆動
- ☑ノンブロッキング
- ☑マルチコア
- ☑コンテキストスイッチ
- ☑オクテット
- ☑プリアンブル
- ☑libevent
- ☑memcached
- ☑RPC
- ☑XMLRPC
- ☑バイナリのデータ交換フォーマット/ライブラリ
- ☑Protcol Buffer
- ☑Thrift
- ☑Message Pack
- ☑getKey( )とpoint( )
- ☑矩形の衝突判定
- ☑スレッドのスケジューリングとオーバーヘッド
- ☑コールバック関数
- ☑タスクシステム
- ☑開発効率とソースコードの移植性
(コラム)
第1章:オンラインゲームの歴史と進化 ——ゲームが「ネットワーク」を取り込んだ!
- ☑オンラインゲームの技術史
- ☑1950年以前
- ☑1950年代
- ☑1960年代
- PDP-1、PLATO、ARPANET、UNIX、
『SpaceWar!』
- PDP-1、PLATO、ARPANET、UNIX、
- ☑1970年代
- Email、C言語、ATARI、FPS、TRPG、MUD、RFC
- ☑1980年代
- IBM PC、Netware、SMTP、ファミリーコンピュータ
(NES)、 『富士通Habitat』、HTML、WorldWideWeb
- IBM PC、Netware、SMTP、ファミリーコンピュータ
- ☑1990年代
- MMOG、
『DOOM』、Java、 『Ultima Online』、MOD、 『Counter-Strike』
- MMOG、
- ☑2000年代
『Lineage』、Playstation 2、 『Second Life』、Flash、 『World of Warcraft』、アイテム課金、ニンテンドーWii、Xbox 360、iPhone
- ☑ハッカー文化圏
- ☑コンソール/アーケードゲームビジネス圏
- ☑Microsoft圏
第2章:オンラインゲームとは何か? ——さまざまな角度から見るオンラインゲーム
- ☑オンラインゲームの呼称
- ☑物理モデル
- インターネット直結モデル
- 携帯ネットワークモデル
- ルータ経由モデル
- アーケードモデル
- アドホックモデル
- ☑
「認知→判断→操作」 の繰り返し - ☑ゲームプレイ空間
(ゲームの状態、ステート) - ☑マインスイーパ
- ☑ゲームの進行
- ☑クローズドベータテスト
(CBT) - ☑オープンベータテスト
(OBT)
- ☑定期的なパッチ、大規模パッチ
(拡張ディスク、追加パッケージ)、緊急メンテナンス
- ☑マシンコストの見積もり
- ☑回線コストの見積もり
- ☑スケーラビリティ
- ☑課金決済手段
- ☑abuse
(攻撃、不正行為) - ☑RMT
(Real Money Trade) - ☑bot
- ☑ゲームクライアント
- ☑サービスの停止
- ☑プレイヤーの失望
- ☑ゲームプレイの結果
- ☑ログ解析
- ☑ゲームプレイのメタ情報
- ☑ハイスコアランキング
- ☑プレイ実績
- ☑その他の統計
- ☑プレイヤーマッチング
- ☑自動選択式
- ☑専用ロビー
- ☑仮想世界
(ビジュアルロビー)
- ☑サーバ設備の階層構造
- ☑プログラミングの基礎スキル
- ☑ゲームプログラミングの基礎知識
- ☑ゲームクライアント開発の知識
- ☑DBの知識
- ☑システム運用の知識
- ☑C/
S (Client Server) とP2P (Peer to Peer) - ☑MMO
(Massively Multiplayer Online) とMO (Multiplayer Online)
- ☑ゲームのデータ形式
- ☑ゲームの通信形式
- ☑ゲームの反応速度
(レスポンス)
- ☑ゲーム処理の
「冗長化」 と 「非同期化」
- ☑ネットワーク遅延のパターン
- 同期式
- 非同期式
- ブラウザ式
第3章:オンラインゲームのアーキテクチャ ——ゲームのおもしろさ×技術的な制約との戦い
- ☑レスポンス命
- ☑ゲームプログラミングの三重苦
- ☑16ミリ秒ごとの変化、扱う情報のサイズ
- ☑
『ツインビー』 - ☑大量のオブジェクトの表示、CPUの処理能力
- ☑ムーアの法則、CPUトランジスタの集積度
- ☑
『Star Strike HD』 - ☑プレイヤーの操作を予想することができない、ゲーム状態の多彩な変化
- ☑カオス的振る舞い
- ☑オンメモリ
- ☑通信レイテンシ
- ☑ping
(コマンド) - ☑traceroute
(コマンド) - ☑光ファイバー
- ☑帯域
- ☑チート
(の利益) - ☑チート
(の種類) - メモリハック
- パケットハック
- データファイルハック
- DLLハック
- タイマーハック
- UIツールハック
- サーバハック
- 偽クライアント
- ☑クライアントマシン
- ☑サーバマシン
- ☑セキュリティ
- ☑補助的システム
(周辺システム)
- ☑ネットワークトポロジ
- ノード、エッジ、リンク、ホップ数
- リング
- ライン
- メッシュ
- スター
- フルメッシュ
- ツリー
- バス
- ☑物理アーキテクチャ:通信するマシン同士の関係、物理的にどのように情報が伝達されるか
- C/
S型 (ピュアサーバ型、リフレクト型) - P2P型
- NATトラバーサル
- C/
S+P2P混成型 - ad-hocモード
- C/
- ☑ゲームクライアント
(コラム)
- ☑論理アーキテクチャ:プレイヤー同士の関係、同時プレイ数の違い
- MO
- MMO
- MOとMMO
- ☑同期式と非同期式
- ☑アイテムデュープ
- ☑調停役
- ☑通信路の信頼性
- ☑NPC
第4章:[実践]C/S MMOゲーム開発 ——常時稼働するゲームサーバの存在
- ☑システム基本構造図
- ☑プロセス関係図
- ☑帯域/マシンリソース計算資料
- ☑プロトコル定義資料
- ☑DB設計図
- ☑プロトタイプ
- ☑テストbot
(ベンチマークbot)
- ☑ゲームサーバ
- ☑データセンター
- ☑
『Runescape』
- ☑プロセス関係図
- ☑ゲームサーバ
(ゲームロジックサーバ) - ☑ゲームDB
- ☑空間分割法
- ☑インスタンス
(ダンジョン) - ☑パラレルワールド方式、ワールド
- ☑同時接続数
- ☑スケーラビリティ
- ☑ゲームサーバ
(gmsv) - ☑ログインサーバ
(loginsv) - ☑データベースサーバ
(dbsv) - ☑リバースプロクシサーバ
(proxy) - ☑メッセージサーバ
(msgsv) - ☑ワールドサーバ
(worldsv) - ☑全体共通DBサーバ
(commondbsv) - ☑課金認証サーバ
(authsv) - ☑ログサーバ
(logsv)
- ☑CPUセントリックなマシン
- ☑ストレージセントリックなマシン
- ☑バックエンド、フロントエンド
- ☑APIの呼び出しシーケンス
- APIを呼び出さない
- 投げっぱなしのシーケンス
- 三角形のシーケンス
- ぎざぎざなシーケンス
- ☑APIのタイプ
- one-way message
- query/
query result - notification
- ☑session鍵
- ☑圧縮アルゴリズム
- ☑暗号化
- ☑Diffie-Helman鍵交換
- ☑Man-in-the-middle攻撃
- ☑DB実装の歴史的変遷
- ☑DBに対する読み込み/書き込み
(read/ write) - ☑テーブルのサイズ
- ☑DBの性能予測
- ☑Linux
- ☑MySQL
- ☑OpenSSL
- ☑GCC
(gnu compiler collection) - ☑計量言語
- ☑DirectX
- ☑Winsock
- ☑Visual Studio .NET
- ☑OpenSSL
- ☑データ構造優先の原則
- ポップ設定
- ☑プレイ可能状態維持の原則
- ☑バックエンド後回しの原則
- ☑継続的測定の原則
- クライアント開発における継続的測定
- サーバ開発における継続的測定
- ☑スケルトン段階
- ☑プロトタイプ段階
- ☑全体フレームワーク実装段階
- ☑量産段階
- ☑仕上げ段階
- ☑運営開始後段階
- ☑todo.
txt
- ☑自動テストプログラム、テストbot
(autocli)
- ☑SDL
- ☑Boost
- ☑k.
xml - ☑スタブコード
- ☑DSL
(Domain-Specific Language)
- ☑経路探索と移動処理
- ☑
「サンプルのコピー」 から積み上げていく - ☑sessionID
- ☑gmsvにおけるスレッドなどの利用
(コラム)
第5章:[実践]P2P MOゲーム開発 ——専用サーバなしでアクションゲームを実装する
- ☑アクションゲーム
- ☑RPC型実装と共有メモリ型実装
- ☑
『Diablo』
- ☑ゲームロジック
(コラム)
- ☑帯域消費量の見積もり
- ☑競合状態
- ☑SyncValueクラス
- ☑C/
S MO
- ☑NAT問題
- オープンインターネット
- 制限なしNAT
- アドレス制限付きNAT
- ポート制限付きNAT
- シンメトリックNAT
- UDPブロックド
- ☑リレーサーバ
第6章:オンラインゲームの補助的なシステム ——サービス強化に欠かせないしくみ
- ☑汎用
- Steam
- Plus+
- OpenFeint
- GameSpy Arcade
- Uplay
- ☑ゲーム機向け
- Microsoft Xbox LIVE
- ニンテンドーWi-Fiコネクション
- PlayStation Network
- Apple GameC enter
- ☑Webブラウザベースゲーム向け
- Kongregate
- ☑既存ミドルウェア
- Rendez-Vous
- ☑プレイヤーマッチング
- ☑ロビー
『StarCraft II』、Battle. net
- ☑リレーサーバ
- ☑チャット
- ☑メール
- ☑フレンドリスト
- ☑プレゼンス
- ☑ロックサーバ
- ☑ブラックリスト
- ☑ボイスチャット
- ☑プレイ実績管理
- ☑ストレージ機能
- ☑
(ゲームクライアント) アップデート - BitTorrent
- ニフティクラウド
- CDN
(Contents Delivery Network)
- ☑ランキング
- ☑ニュース配信
- ☑課金認証
- ☑バーチャルポイント管理
- ☑C/
S MMOゲームの収入 (コラム)
- ☑ゲームデータ閲覧/検索ツール
- ☑ワードフィルタ
第7章:オンラインゲーム運営を支えるインフラ ——構築、負荷テスト、運営開始
- ☑インフラ関連の必要な作業
(企画概要の決定) - (プログラムの設計)
- インフラの大体の見積もり
- (プログラムの実装)
- インフラの見積もり
- 業者への見積もり依頼
- 見積もり判断、発注
- スケジュール決定
- インフラ構築
- 負荷テスト、デバッグ
- ローンチ
- 運用開始
- 設備やサービスの更新
- ☑初期費用
- 情報機器:マシン
(Dellなどで見積もる)、スイッチングハブ、ルータなど - ソフトウェア:Red Hat Linux、VMwareなど
- 情報機器以外:棚やケーブル類、電源など
- サービス:サーバ監視費用、データセンター利用料、ドメイン使用料、電子署名など
- 情報機器:マシン
- ☑継続費用
- 回線
- 電気代
- ソフトウェア:ウイルススキャンソフトの利用料など
- サービス:Red Hatのオンサイトサービス、ドメイン利用料など
- ☑リプレース費用
- 情報機器:故障したマシンの置き換え、数年に一度のリプレースなど
- ☑19インチラック
- ☑スタートアップ
- ☑データセンター
- ☑パブリッククラウド
- ☑無制限無料お試し一発リリース
- ☑負荷の曲線
- ☑サーバデプロイメント
- RPM、tar.
gz - curl
(コマンド) - mysqldump
(コマンド)
- RPM、tar.
- ☑ステージング
- ☑サーバのモニタリング、生死監視
(死活監視) - ☑ログ出力/管理
- ☑アルファテスト
- ☑クローズドベータテスト
- ☑オープンベータテスト
- ☑登録ユーザ数
- ☑同時プレイ数
- ☑負荷テスト
- ☑vmstat
(コマンド) - ☑/proc/
interrupts - ☑ps
(コマンド) - ☑top
(コマンド) - ☑netstat
(コマンド) - netstat -s
(コマンド)
- netstat -s
- ☑ssh-add
(コマンド) - ☑expect
(コマンド) - ☑サーバの起動スクリプト
- ☑トラブル発生時の対応
第8章:オンラインゲームの開発体制 ——チーム運営上の課題
- ☑ゲームの企画内容と、チーム運営
- ☑ゲームデータの永続化度合い
- 運営開始後の3ヵ月が最もハード、運営は5〜10年続く
- ゲームの運営と技術者
- プロジェクト管理における課題
- ☑ゲームにおけるプレイヤー同士の関係
- ☑プレイ結果の共有範囲
- ☑チャットシステムの内容
- ☑メンテナンスとアップデートのスケジュール
- ☑ソースコードの規模
- イテレーションを廻す部分が多いと問題になる
- ビルド時間
- プログラムの起動時間
- サーバプログラムの起動手順
- データのバリデーション
- ☑作業分担
- ☑継続的スキルアップ法
- ☑プロジェクト管理術
- ゲーム開発とスクラム
- ☑プロジェクトの引き継ぎ
- テストの準備
- 開発環境の構築時間は短く
- 情報セキュリティの匙加減
- ☑オンラインゲーム開発のコスト感覚
(コラム)