← 戻る

GameLiftのGo用Server SDKを作ってみたい(1)

2020-02-11

AWS に GameLift というサービスがある。これを使うとゲームサーバ(*)を勝手にスケールしてくれるなどいい感じにマネージしてくれるらしい。

(*GameLift がいうところのゲームサーバは、いわゆる API サーバではなく、いわゆる Dedicated Game Server の方。Ark やマインクラフトなどマルチプレイ用サーバを自分で立てられるゲームで遊んだことがある人ならイメージしやすいと思う)

GameLift を使うには、GameLift Server SDK を組み込んだゲームサーバを作って、GameLift にアップロードする必要がある。GameLift Server SDK というのは、GameLift がゲームサーバを管理するための各種処理をやるやつで、公式には C++と C#の SDK が提供されている。あと非公式な port としてNode.js 版がある。前回の記事の通り Go でサーバもクライアントも書きたい気分なので、今回は Go 用の Server SDK を作ってみたい。

Server SDK の内容は、おおまかには以下の通り。

ということは、Socket.IO と Protocol Buffers がなんとかなればよさそう。

幸い Go には Socket.IO のクライアントを実装したgomasioというライブラリがあって、Protocol Buffers は Google がサポートしているライブラリがあり、Protocol の定義ファイルは前述の Node.js 版の著者が公開してるしで、割と簡単にいけそうな気がする。

https://gist.github.com/neguse/1881c8d291eebf15a2a3f8c36a8ee4bf

ということでやってみている途中のコードがこちらになります。

とりあえずテスト用のローカルで起動する GameLiftLocal というサーバに接続して、StartGameSession が呼ばれるところまでは確認できた。次に Ack を返さないといけないらしいのだけど、ちょっと方法が見つからなくて、どうすれバイインダーというところで今日は以上です。