その1読書メモ転職をして、昔から憧れていたゲーム開発に携われるようになりました。いうわけで今は勉強のため、「オンラインゲームを支える技術」を読み進めています。ページ数も多く、内容も濃いので少しずつブログにメモっていくことにします。[速習]オンラインゲームプログラミング】オンラインゲームを実装するためには、以下の2大スキルが必要!ネットワークプログラミングゲームプログラミングネットワークプログラミングOSI参照モデルとTCP/IPは是非とも理解しておきましょう。オンラインゲームにおいてはレイヤ5やレイヤ6におけるデファクトスタンダードで入れ替え可能なプロトコルがまだ存在していないため、一般的にレイヤ5以上はすべてオンラインゲームの開発者で実装する必要があるようです。低遅延:数ミリ秒〜20ミリ秒以内の遅延で処理を行い、結果を返すステートフル:クライアントは状態を持っており、敵などの可動物が多数リアルタイムにオンメモリ動作を続けている。画面描画などの非常に重い処理も同時に行う必要がある。多様性:クライアントのネットワーク状況の多様性に対応できなければならないオンラインゲームではリアルタイム性や快適な操作性が求められるので、低遅延ってところがポイントになりそうです。面白いゲームでも、読み込みが頻繁にあったり遅延が多々発生するとやる気を無くしています。ソケットプログラミング入門IPでは、通信路の端点は1つのIPアドレスと1つのポート番号の組で特定します。使われる既知のポート番号については、IANAのポート番号表に掲載されています。ポート番号も本当に載ってる・・・。ソケットプログラミングについて、ソケットAPI+擬似コードを用いての説明が載っています。TCP通信路の状態遷移については、下記サイトの図が分かりやすいですね。複数クライアントに対するソケットプログラミングについて同時接続数3000とかが普通にあり得るオンラインゲームの世界では、接続の度にスレッドを生成するマルチスレッド方式では3000スレッドとか立ち上がってコンテキストスイッチだけでCPUがあっぷあっぷになってしまいかねません。よってオンラインゲームの世界ではクライアントでもサーバでも通常、シングルスレッドでポーリングを用いたごく単純なイベント駆動のノンブロッキング実装を使うのが基本だそうです。それ以外と続くようです。高めるためにもガーベッジコレクションを有するJavaやC#、あるいは軽量言語を使えないかと各社で検討も進められているようです。現状では、サーバの最高性能を引き出すためにC/C++で書くのが最も適しており、開発効率と性能との間でトレードオフがあります。言語とスループットに関して以下のような表を載せています。動的言語JavaとC/C++の間で10倍もスループットに差があるのはオンラインゲームに特有だそうです。JITコンパイラの進化もありJavaとCでそんなに性能差を気にしなくてよくなってはきましたが、オンラインゲームのようにOSの入出力を頻繁に行う(システムコールを頻繁に呼び出す)アプリケーションではまだまだ性能差があるようです。その1Tweet関連記事2019-09-10なんでも知っている超人の神話とハードワークの神話を捨てる9年振りに読んだ「プログラマが知るべき97のこと」から学ん...2019-09-079年振りにプログラマが知るべき97のことを読んで学びになった最近仕事でリファクタリングをやっているが悩ましい部分が多く...2019-07-21Witcher3の開発で使われているSimplygonとUmbra3についてGDCの資料を見て英語とゲーム開発について勉強するシリーズ。(3)注目記事スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。