simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

環境準備

■前置き1

オンラインゲーム開発には UNIX ベースの OS からなるマシンが必要です。
一般の人が触れるようになった UNIX 仕様を満たすOSで有名なものが Linux で、そのLinuxディストリビューションLinux の種類を表すもの?)には Ubuntu, Cent OS などがあります。
ディストリビューションって Windows でいうところの 7 や 10 といった感じですかね? でも Cent OS 6 とか 7 とかあるし、やっぱり Windows = Cent OS というイメージ?
なんでいっぱい Linux があるんだろう?

http://nomado.uzusionet.com/index.php?Linux%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%AF%E3%81%AA%E3%81%9C%E6%B2%A2%E5%B1%B1%E3%81%82%E3%82%8B%E3%81%AE%E3%81%8B%EF%BC%9Fnomado.uzusionet.com

Linux」とは正確に言うとOSの中核になる「カーネル」と呼ばれる部分だけを指し
カーネル以外の組み込み作業は、一般のユーザーが簡単に行えるものではない
各種の企業や非営利団体が独自に組み込み作業を行い、一般のユーザーでも簡単にインストールできるようにパッケージ化
このパッケージのことをディストリビューションと呼んでいる

なるほど、そもそも Linux の認識から間違っていたのか、カーネル部分が Linux で、その他もろもろが入ってディストリビューションなのね
ディストリビューションの中に Linuxカーネルがあるとイメージを変えることで理解できた。(無知な人の間違った説明を受けて、今まで混乱していたのか)

■前置き2

マシンを用意するという面倒な作業があるので参入障壁が高いと思っていましたが
最近の Windows には for Linux システムがあるので、これを使えば極めて高速に Linux のアプリケーション開発と実行ができます。
調べてみると、ネットワーク対応はしないとのことでサーバーとして運用することはできません。
(じゃ、困るんですけど)

Cent OS をインストールするというキーワードで調べると、VirtualBox (Windows) に Cent OS が入るらしいので、こちらでなんとかなるかもしれません。
qiita.com
でも、つながるだけの部分で色々と気をもむし、勝手に接続できなくなるらしいので、作業のモチベーションが上がらない。

そこで、お金をかけてでもクラウドサービスを始めてみて、ネットワーク上に Ubuntu や Cent OS を用意して、ローカル環境じゃなくてインターネットでつないでテストしていきたいと思います。

■前置き3

全然知識ないのですが C++ でサーバーコード書くとハンザツになるそうです。
最近は軽量言語でもパフォーマンスが出る Go とか Rust を使って簡単にサーバープログラムを書けるらしいので、私はそこから学んでみたい。
ですが、そもそもクラウドサービスもLinuxディストリビューションについても、何にもわからない。

学習作業のゴールを決めてみます。
1.pingを打ち合う適当なプロトコル定義したらコード自動生成にて Go か Rust でサーバーコードが出力されて、C# Unity クライアントも出力されることを確認する
2.出力されたサーバーコードをクラウドサービスの複数のディストリビューションで実行し、Unity クライアントからそれぞれのクラウドマシンに ping を飛ばしたら、往復時間を算出するところまで確認する
3.データベースにKVSとRDBを用意して、それぞれに値を書き込んで、読み出すプロトコルを定義して動作確認する。

要は世にある大規模オンラインゲームの基本的な要素を用意できるようになりたいわけです。

■作業1

Go って何?
Hello World はどうやって確認?
ローカルで通信確認できる?
サーバーで実行するには?

■作業2

クラウドサービスには何がある?どれ使うべき?
クラウドで何個かディストリビューション用意して常駐させるには?
さっき作った Go のサーバーってどうやって配置?
作ったディストリビューションにつながる?

■作業3

データベースっていっぱいあるの?どれがいいの?
ローカルで試せる?
サーバで試してみる

ここまでくれば、最初の学習作業はゴールしてるよね