Ameba 個人開発ブログ・エンジニア備忘録
仮想通貨のリアルタイム価格監視ツールや、自動売買システムを作っているとき、「WebSocket がすぐタイムアウトして切断される」というトラブルに必ずぶつかりますよね。
私も実際に開発・運用していて何度も困りましたが、超シンプルなコードを 1 つ追加するだけで、安定して接続し続けることができるようになりました。
今回は、難しい理論は最小限に、すぐ使えるコード付きで解決方法をまとめます。
なぜ WebSocket はすぐ切れるの?
結論から言うと……一定時間、データのやり取りがないと、サーバー側で「接続を切ってもいい」と判断されるからです。
よくある原因はこちら:
- 通信が無通信状態になり、タイムアウト
- 心拍(ping)を送っていない
- 切断されたときに自動で再接続しない
- ネットワークが一瞬落ちただけで復帰できない
特別な故障ではなく、仕組み上の問題なので、ちゃんと対策すれば大丈夫です。
接続をさらに安定させるコツ
-
心拍(ping_interval)は必ず設定10〜30 秒に 1 回送れば十分安定します。
-
切断時は自動で再接続手動で再接続するのは現実的ではありません。
-
たくさんの通貨ペアを一気に購読しない負荷が高くなり、切断されやすくなります。
最後にまとめ
仮想通貨リアルタイム API の WebSocket がすぐ切断される問題は、心拍 + 自動再接続 を追加するだけで簡単に解決できます。
私は実際のプロジェクトで AllTick API を使っていますが、このコードと組み合わせると、24 時間安定してデータを取得し続けられます。
同じトラブルで悩んでいる方は、ぜひ試してみてください😊