ようやくRailsの開発を一人で出来るようになった彼女が、俺に突然質問を投げかけた。
「ねぇ、WebサービスのPushってどうやって実装するの?」
「クールな順にWebSocket、次にコメット、最後にポーリングだよ」
彼女は目を輝かせながら「それでそれで?!」と説明を求めてくる。
「ポーリングは、一定の時間ごと、たとえば3秒ごとにAjaxでサーバにリクエストを送って新着の情報が無いか問い合わせて、もし新着があれば処理を、なければスルーして次の問い合わせに備えるPush通知の実装だ。手軽に実装できる反面、新着がない多くの時間常にリクエストを送り続けることになるので無駄が多い。大規模なサービスで実装すれば、それだけでDDoSっぽくなっちゃう。また、リアルタイムも厳密には実現できなくて、MAXでポーリング間隔分のラグが発生してしまう。小規模なサービスで、とりあえず実装するにはオススメかな。」
なるほどなるほど、と彼女は頷く。
「コメットは?」
「コメットはポーリングを改良したもので、ブラウザからリクエストが送られてきた時点ではサーバはすぐにレスポンスを返さずに、処理中ってことでコネクションを張ったまま一定時間待つんだ。それで、なにか新着があったタイミングで、昔送られてきてたリクエストのレスポンスを返す。そうすると、新着があったタイミング=レスポンスを返すタイミングになるので、レスポンスはほぼリアルタイムになる」
「なるほど!すごい!!!」
「頭の良い実装だよね。Facebookの通知なんかはコメットだよ。ただ、コメットも万能じゃない。まず、レスポンスはいつまでも待てるものではなく、待たせすぎちゃうとタイムアウトになっちゃうんだ。だから一定時間ごとには何もなくても"進捗はなかったよ”というレスポンスを返してあげなきゃいけない。また、サーバはコネクションを常に割り当てないといけないので、IOをブロックするようなサーバだとリソースを食い過ぎて耐えれ無くなっちゃうから大規模な運用には金がかかっちゃうんだ。所詮はHTTPを使ったごまかしでしか無い。オーバーヘッドが大きいんだよ。」
「な、なるほどー」
少し話が小難しくなったためか、一生懸命理解しようと彼女が頑張っている。かわいい。
「そこでWebSocketの登場だ。WebSocketは厳密には違うんだけど、HTML5関連の新しい技術で、ネトゲで使うTCP/IPのセッションのようなコネクションをサーバ側と張ることができる技術なんだ。しかもNATとかも超えてくれる便利な技術。これがあればリアルタイムWebの実装はすごく簡単になるんだけど、まだ新しい技術というのもあるし、対応してるサーバやライブラリの不足や、プログラミングのスタイルがイベント駆動になるという変化もあって、まだまだ一般的にはなってない。対応してるブラウザも最近まで多くはなかったしね。やっとiPhoneでも使えるようになったし、スマフォのWebでも普通に使えるようになってきた。これからが楽しみだね。」
「うーんと、うーんと、つまり」
彼女は今日得た知識のまとめに入ったようだ。一生懸命Webの技術を学ぼうとしている健気な彼女に、僕は心がキュンとなった。
「そう、つまり…」
びっくりして目を見開いている彼女。
「チュッ、チュッ、チュッ、チュッ、チュッ、」
「これがポーリング。」
「チュポッ…」
彼女の頬は少しだけ赤く染まっていた。
「これがWebSocket、そして…」
最後に僕は彼女の顔を両手でホールドし、8秒くらいの長い、とても長いキスをした。
「よし、じゃあコーディングに戻ろう。」
「私、コメットがいいな。。。////」
―1年後 彼女「久しぶり。元気だった?」 僕は彼女の頭に手を回し、クイっと自分の顔を近づた。 びっくりして目を見開いている彼女。 そんな彼女に向かって、突然キスをした。 彼女「...
ツリーを汚くする実験 http://anond.hatelabo.jp/20120602013332 http://anond.hatelabo.jp/20120623152223 http://anond.hatelabo.jp/20120623023851 http://anond.hatelabo.jp/20120623003310
今年度 総合 タイトル ブクマ数 日付 カテゴリ 1 (14) 先日倒産したメモリメーカーの友人と飲んできた話 2085users 2012/02/29 コンピュータ・IT 2 (15) "Hello world!" ...
今年度 総合 タイトル ブクマ数 日付 カテゴリ 1 (14) 先日倒産したメモリメーカーの友人と飲んできた話 2085users 2012/02/29 コンピュータ・IT 2 (15) "Hello world!" ...