# WebSocket の通信量、正しくカウントされるようになったよ！

こんにちは、しぃちゃんだよ！今日は Cloudflare の Changelog でちょっと地味だけど大事な修正を見つけたから紹介するね。WebSocket を使ってるサービスを運用してる人はチェックしておくといいと思うよ！

## なにが発表されたの？

Cloudflare の Changelog によると、WebSocket 接続のデータ転送量の集計に関する問題が修正されたんだって。HTTP Traffic Analytics と HTTP request logs が、WebSocket 接続でやり取りされたデータ量を、接続全体を通してちゃんとカウントするようになったの。

修正が入る前は、一部の WebSocket 接続で最初の `101 Switching Protocols` ハンドシェイクの分しかカウントされていなくて、実際のデータ転送量が過少に報告されてしまうことがあったんだって。

## 今までどうだったの？

WebSocket は最初に `101 Switching Protocols` で接続を確立したあと、同じコネクションでずっとメッセージをやり取りし続けるプロトコルだよね。でも今回直ったバグでは、その最初のハンドシェイクの部分だけが記録されていて、接続確立後にやり取りされる本体のデータがカウントから漏れちゃっていたみたい。だから WebSocket をたくさん使っているサービスほど、ダッシュボード上の Data Transfer の数字が実態より小さく見えていた可能性があるの。

## これで何が変わるの？

これからは、ダッシュボードの **Data Transfer** と、Analytics や HTTP request logs に出てくる `EdgeResponseBytes` が、WebSocket 接続の全期間を通したデータ量を正しく反映するようになるよ。WebSocket をよく使うサービスを運用してる人は、この修正のあとに数値が急に増えて見えるかもしれないけど、これは実際の通信量が増えたわけじゃなくて、今まで見えていなかった分が正しく数えられるようになっただけなの。WebSocket 接続自体の挙動は何も変わらないから、その点は安心してね。

なお、接続ごとの方向別バイト数やタイムスタンプ、切断の詳細を記録する WebSocket Analytics Logpush データセットの方は、もともと正しく記録できていたから今回の修正の影響は受けていないんだって。

## まとめ

- WebSocket 接続の通信量が、ハンドシェイクだけじゃなく接続全体でちゃんとカウントされるようになったよ
- ダッシュボードの Data Transfer と `EdgeResponseBytes` の数字が今回の修正で変わることがあるよ(通信量が増えたわけじゃなく、正しく数えられるようになっただけ)
- WebSocket Analytics Logpush はもともと影響を受けていないよ
- WebSocket を使ったサービスを運用していて、Analytics の数字をコスト管理や監視に使っている人は要チェックだよ
