Skip to content

Reinventing Polling

GPTが世界を揺らしたとき、Enterprise版はまだなかった。

コンプライアンスを重視する企業にとって、それは厄介な状況だった。学習データに社内情報が取り込まれるリスクへの怯え。一方で「うちもAIを活用しろ」という上からの圧力。両方が同時に降ってくる。彼らの解はシンプルだった。GPTのAPIを叩いて、社内向けのGPTクローンを作る。データは外に出ない。経営層にも説明がつく。理屈は通っている。

できあがったものを見て、わたしは歴史のループを目撃した。

SSEという技術がある。Server-Sent Eventsの略で、サーバーからクライアントへ一方向にデータを流し続ける仕組みだ。HTTPの上に乗っているからWebSocketほど大げさではない。接続を張りっぱなしにして、サーバー側からイベントを逐次プッシュする。ChatGPTであの文字が一文字ずつ流れてくるのがまさにSSEだ。広く知られるようになったのは最近で、GPTをはじめとするチャットサービスで初めて知った人も多いだろう。

そのクローンは、SSEではなくポーリングで実装されていた。

数秒おきにAPIを叩いて、レスポンスが返ってきたか確認する。返ってきたら表示する。まだなら待つ。また叩く。世間では大企業に区分される従業員数を抱える会社で、全員が同時にポーリングを回す。頻繁に落ちた。当然だ。WebSocketの前にAjaxポーリングで擬似リアルタイムをやっていた時代の悪夢がそのまま再現されていた。

SSEならコネクションは1本で済む。HTTPの仕様に沿っているからプロキシもCDNも通る。再接続のメカニズムも仕様に含まれている。EventSourceのAPIは数行で書ける。ポーリングのような無駄なリクエストも、WebSocketのようなプロトコル切り替えも要らない。用途が合えば、いちばん筋のいい選択肢だ。

車輪の再発明はエンジニアの業だと思っている。自分で作ってみて初めて理解できることもある。ただ、あのときわたしが感じたのは共感ではなく脱力だった。既にある技術を知らないまま、同じ問題を劣化した形で解き直している。しかもそれを止められなかった。

歴史は繰り返す。ポーリングもだ。