Agones サイドカーでSDK Clientを使用する
サイドカーを使った経緯
Node.jsのClient SDKを使ってみたところ、ビルドに失敗してどうしても解決できず、GoのClient SDKをサイドカーとして使うことにしました。
Websocketを使ってみたく、Socket.ioチュートリアルを進める、SDKも入れてみるとビルドが失敗する、、という状況でした。
備忘としてコードも残しておきます。https://github.com/shimon1119/chat_agones
メインコンテナ
Socket.ioのチュートリアルに少し手を加えたようなものです。
接続確率時などにイベント発生時、axiosでGoのREST APIサーバーに通信するように設定しました。
https://github.com/shimon1119/chat_agones/blob/main/sample-chat/index.ts#L22
サイドカー
GoのEchoを使って簡単にルーティングの設定します。
SDKと通信する内容もシンプルにGameServerのSTATEを変更するのみです。
https://github.com/shimon1119/chat_agones/blob/main/sdk-client/server.go
YAML
apiVersion: agones.dev/v1
kind: GameServer
metadata:
name: sample-chat
spec:
container: sample-chat
ports:
- name: app-port
portPolicy: Dynamic
containerPort: 3000
protocol: TCP
health:
disabled: true
initialDelaySeconds: 60
periodSeconds: 12
failureThreshold: 5
template:
spec:
containers:
- name: sample-chat
image: sample-chat:latest
imagePullPolicy: IfNotPresent
- name: sdk-client
image: sdk-client:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
healthに関してうまく理解できていなかったので、disabled: trueに設定して無効にしています。
これをdisabled: false (デフォルト)に設定すると、GameServerがUnhealthyとなってしまいます。
サイドカーとの通信について
同じPodで複数のコンテナが存在する場合でも、コンテナから見るlocalhostは共通です。
フロントのWebアプリから、localhost/xxxxを叩くだけで良いため、特別な設定はしていません。
実行方法
上述のgitをcloneして、各ソースをビルドして実行いただければと思います。
simple-gameserverをずっと参考にさせてもらっていました。
goに慣れていない自分だと、読むのが難しかったりしましたが、少なくともSTATEを触るだけなら、関数を実行するだけと簡単に使えるようにしてもらっていて助かりました。非同期処理に慣れるのも今後の自分の課題です。
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント