← 戻る

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

2020-03-22

前回から引き続き。https://github.com/neguse/gomelift

クライアントから送ったメッセージに対しての Ack を受け取るところは、思ったよりあっさり作れた。送信時に channel を作成して message id をキーにした map に channel を格納して channel を receive、受信時に map から channel を取り出して送信したら後続の処理が行われるという方法。

GameLiftServerSDK に付属している GameLiftLocal サーバを使ってテストしているのだけど、1 分強接続すると勝手に切断する問題が出てて、どのレイヤー(engine.io, socket.io, gamelift クライアント)が問題なのかわからないので詰まっている。たぶん engine.io なんじゃないかという気がするのだけど、でも ping/pong はできてるはずで、node 用の socket.io サーバに接続した場合は問題なく接続が維持できてるっぽい。なぜ…

公式 SDK でも同様のクライアントを組んでみて、パケットキャプチャして比較してみるとかかなぁ。でもそれだと WebSocket が使われそうなので(GomeLift では手抜きのため HTTP Polling を使っている)、同じ方式を使うためにまず Transport を WebSocket に置き換えてみるのが良いかもしれない。

なかなか完成しない…