← 戻る

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

2020-03-22

前回から引き続き。[https://github.com/neguse/gomelift](https://t.umblr.com/redirect?z=https%3A%2F%2Fgithub.com%2Fneguse%2Fgomelift&t=MmMwMmI2YmNiNWRjMjVlMzcxNWFkMTRmNmE3MjE2YzBjZjI1ZTJhZixhcTgxY2hQWA%3D%3D&b=t%3Asc3qyIVMMuRCCqlO929J5w&p=https%3A%2F%2Fwww.neguse.dev%2Fpost%2F612563897674809344%2Fgamelift%25E3%2581%25AEgo%25E7%2594%25A8server-sdk%25E3%2582%2592%25E4%25BD%259C%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25BF%25E3%2581%259F%25E3%2581%25844&m=1)

クライアントから送ったメッセージに対しての 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 に置き換えてみるのが良いかもしれない。

なかなか完成しない…