2012-06-23

キスで学ぶPush実装技術

彼女MacBookを並べてコーディング

ようやくRailsの開発を一人で出来るようになった彼女が、俺に突然質問を投げかけた。

「ねぇ、WebサービスPushってどうやって実装するの?」

「一般的には3つの方法がある。」と俺は答えた。

クールな順にWebSocket、次にコメット最後ポーリングだよ」

彼女は目を輝かせながら「それでそれで?!」と説明を求めてくる。

ポーリングは、一定時間ごと、たとえば3秒ごとにAjaxサーバリクエストを送って新着の情報が無いか問い合わせて、もし新着があれば処理を、なければスルーして次の問い合わせに備えるPush通知の実装だ。手軽に実装できる反面、新着がない多くの時間常にリクエストを送り続けることになるので無駄が多い。大規模なサービスで実装すれば、それだけでDDoSっぽくなっちゃう。また、リアルタイムも厳密には実現できなくて、MAXポーリング間隔分のラグが発生してしまう。小規模なサービスで、とりあえず実装するにはオススメかな。」

なるほどなるほど、と彼女は頷く。


コメットは?」

コメットポーリングを改良したもので、ブラウザからリクエストが送られてきた時点ではサーバはすぐにレスポンスを返さずに、処理中ってことでコネクションを張ったまま一定時間つんだ。それで、なにか新着があったタイミングで、昔送られてきてたリクエストレスポンスを返す。そうすると、新着があったタイミングレスポンスを返すタイミングになるので、レスポンスはほぼリアルタイムになる」

「なるほど!すごい!!!

「頭の良い実装だよね。Facebookの通知なんかはコメットだよ。ただ、コメットも万能じゃない。まず、レスポンスはいつまでも待てるものではなく、待たせすぎちゃうとタイムアウトなっちゃうんだ。だから一定時間ごとには何もなくても"進捗はなかったよ”というレスポンスを返してあげなきゃいけない。また、サーバコネクションを常に割り当てないといけないので、IOをブロックするようなサーバだとリソースを食い過ぎて耐えれ無くなっちゃうから大規模な運用には金がかかっちゃうんだ。所詮HTTPを使ったごまかしでしか無い。オーバーヘッドが大きいんだよ。」

「な、なるほどー」

少し話が小難しくなったためか、一生懸命理解しようと彼女が頑張っている。かわいい

「そこでWebSocketの登場だ。WebSocketは厳密には違うんだけど、HTML5関連の新しい技術で、ネトゲで使うTCP/IPセッションのようなコネクションをサーバ側と張ることができる技術なんだ。しかNATとかも超えてくれる便利な技術。これがあればリアルタイムWebの実装はすごく簡単になるんだけど、まだ新しい技術というのもあるし、対応してるサーバライブラリの不足や、プログラミングスタイルイベント駆動になるという変化もあって、まだまだ一般的にはなってない。対応してるブラウザ最近まで多くはなかったしね。やっとiPhoneでも使えるようになったし、スマフォWebでも普通に使えるようになってきた。これからが楽しみだね。」

「うーんと、うーんと、つまり

彼女今日得た知識のまとめに入ったようだ。一生懸命Web技術を学ぼうとしている健気な彼女に、僕は心がキュンとなった。

「そう、つまり…」

僕は彼女の頭に手を回し、クイっと自分の顔を近づた。

びっくりして目を見開いている彼女

そんな彼女に向かって、連続5回キスをした。


「チュッ、チュッ、チュッ、チュッ、チュッ、」

「これがポーリング。」


今度は自分の顔を少し傾け、舌を入れる深いキス


「チュポッ…」


彼女の頬は少しだけ赤く染まっていた。


「これがWebSocket、そして…」


最後に僕は彼女の顔を両手でホールドし、8秒くらいの長い、とても長いキスをした。

彼女の顔は真っ赤に染まり、目は少しだけトロンとしていた。


「これがコメット。わかったかな?」



彼女はとても恥ずかしそうに「はい…////」と返事をした。


「よし、じゃあコーディングに戻ろう。」



コーディングを始めた5分後、彼女がおもむろに呟いた。



「私、コメットがいいな。。。////」


東京は快晴、今日も絶好のペアプロ日和だ。

トラックバック - http://anond.hatelabo.jp/20120623152223

記事への反応(ブックマークコメント)