iyuichiの私的開発ログ

渋谷で働くWebエンジニアのログ. Java, Android, iOS, Docker, GCP, AWS, ゲーム開発

iOSアプリでWebSocketを利用する ~ SocketRocketでハマる

iOSアプリでWebSocket通信を行うのにSocketRocketというライブラリがGitHubにあったので使ってみることにしました。

そこで1つハマっていたことがあって解決したので共有しておきます。

node.jsを使って簡単にWebSocket Serverを構築して、iOSのシミュレータで接続&切断を試していたところどうもnode.jsで起動したサーバがエラーで落ちる模様。

node.js側は、wsってのをnpmからインストールして使いました。

そこでこんな感じでエラーをハンドリングできることがわかったのでコード追加。

ws.on('error', function(e) {

console.log('error: %s', e);

});

エラーの内容は、「invalid error code」であることがわかりました。

ただサラッと調べた感じだとわからなくて、切断しなければ問題発生しないんでしばらく放置していました。

が、やっぱり気になるので調べていたらpull requestの中に答えを見つけました!

https://github.com/square/SocketRocket/pull/157

なんと、SocketRocketのcloseメッソドが実装しているclose codeが不正な値だと書いてある。。

SocketRocket uses the invalid close code -1 as the value in the default close method.

RFCに従うと1000が正しいらしい、ということで手元のソースを書き換えてビルドしなおしたらエラーを吐かずに動くようになりました。

早く気づけよ自分。。