この記事は,日経ソフトウエア2007年1月号,連載「簡単実装で学ぶWeb技術2006」の第7回「Comet――プッシュ型のWebアプリケーションを作る」の再録です。記事は執筆時の情報に基づいており,現在では異なる場合があります。 こんにちは,結城浩です。 今回は,サーバーからデータをプッシュするタイプのWebアプリケーションを作成する技法の「Comet」を紹介します。簡単なチャット・プログラムを通してCometの仕組みを学びましょう。 Cometとは 通常のWebアプリケーションは,クライアント(Webブラウザ)から送られてくるリクエストを受け取って動作します。つまり,WebアプリケーションはユーザーがWeb上のリンクをたどったり,ボタンを押したりすることをきっかけに動くのです。ここで,動きの主導権はクライアント側にあります。クライアントがサーバーから情報を「引き出す」ことによって動作する
ドリコム研究室より、alis(http://alis.drecom.jp/) をテストリリースします。ゲームというか、コミュニティというか、Second Life ならぬ 1.5th Life といった感じです。な… 何を言ってるのか わからねーと思うが(ry。αリリースなので若干ヘルプレス! alis のココがみどころ: ブラウザだけで遊べる! Comet 技術を使った(もち Shooting Star !) を使ったリアルタイムコミュニケーション! つーか、要はチャットです。 アバターを自由に作成できる! おそらくみんな好き勝手アップするので、通常のアバターのようなお行儀の良いものじゃなくてテラカオスになります。 Blog っぽいものがついてる! 位置座標を付加できて、Hiki フォーマット! Wiki っぽいものがついてる! 位置座標を付加できて、Hiki フォーマット! テーマがア
● [Rails] Comet 勉強会 #1 勉強会の日の朝はいつもサボリの誘惑がある。もう少し寝ていたかったり、外に出るのが面倒な気分になったり、他の事をやりたくなったり、急に敷居を高く感じたり、雨が降ったり。でも、勇気を出して行くと、神様はいつもいい経験を与えてくれる。今回もニコニコ動画の中の人とか凄い人達が一杯いた。そういう人達と話をする機会、彼らの思考過程を直接見れる機会があるのは凄く貴重だ。 Don't be afraid 意義ある貴重な時間。Don't be afraid Don't be Erlang! ということで Erlang に関する勉強会。リl|*´∀`l|<でも誰も Erlang について勉強してきてないんだよ。だからブレスト形式になっちゃったー。しかし、そこがいい!ドキュメントもコードもなしに、みんながそれぞれ持つ少ない情報から技術的知識と論理的思考によってErl
ErlangでCometしてみた. (iframe方式は結局だめそうなので,Cometに) Comet チャットサンプル 実装はきわめて手抜きです.あくまでサンプルとして. ソース: chat.erl (22行.etsテーブルの初期化) chat.yaws (72行.サーバ側の実装) index.html (52行.HTML+JS) ※別途jqueryが必要 こんだけ短いソースでも,ちゃんとCometできるし,C10Kにも対応できる.(問題はいろいろあるコードだけど) いろいろちゃんと実装したとしても,かなりシンプルに仕上がると思う. Comet の正しい使い方で紹介されているプログラミングモデルのどれにも当てはまらない新しい方式,といえるかも. Cometのために特殊な実装をする必要もないし,I/O多重化など実装がめんどくさい手法を使う必要もない. 普通に各リクエストの処理を書いて,新規
JavaScriptベースのチャットを作るとき,Cometを使うのが一般的とされているようだけど,もっと楽な方法でも良さそうに思える. Cometでは1回リクエストを受け取るたびにコネクションを切断しているので,Keep-aliveなどと併用しなければならない. 実際に都度TCP接続を張り直すとコストが大きいので,Keep-Aliveを併用したりする必要があるものの,それも色々裏技的な回避をしないとだめな模様. (Cometの正しい使い方を参照) でも,チャットを実装する上では,都度コネクションを切断する必要がなさそうに思える. iframeで別のページを読み込み,その中で script タグを使って親フレームを更新するだけではダメなのだろうか. この方法であれば, ・Cometのように,切断してから再接続するまでのタイムラグがないので,サーバ側の余計な処理が減る.(切断中に届いたメッセー
せっかくのイベントドリブンフレームワークな POE ですから Comet でチャットをやってみようかと。 http://d.hatena.ne.jp/dayflower/20061116/1163663677 こちらの POE::Component::HTTP による Comet チャットサーバですが、どのぐらいの接続まで耐えられるのか? 実験。 クライアントとして、HTTP::Async を使って同時接続を張りまくるスクリプトを用意。 #!/usr/bin/perl use HTTP::Async; use HTTP::Request; use Time::HiRes qw/time/; use strict; my $slots = shift || 20; my $async = HTTP::Async->new( slots => $slots ); my $req = HTTP:
せっかくのイベントドリブンフレームワークな POE ですから Comet でチャットをやってみようかと。ありきたりですが。 POE::Component::* でウェブサーバを立ち上げられるのは現在のところ, POE::Component::Server::HTTPServer POE::Component::Server::SimpleHTTP POE::Component::Server::HTTP の3つがあります。1番目は最近 inactive なのでパス。2番目は「イベントフレームワーク」への馴染みはいいんですが「Simple」じゃなくなってます。3番目はコールバック関数を登録するというお気楽スタイルなんですがちょっと雑な感じ。 今回は楽をするために3番目の PoCo::HTTP を使ってみたいと思います。id:naoya 氏も最近紹介してましたし。 URI の設計指針は, チャ
GT Nitro: Car Game Drag Raceは、典型的なカーゲームではありません。これはスピード、パワー、スキル全開のカーレースゲームです。ブレーキは忘れて、これはドラッグレース、ベイビー!古典的なクラシックから未来的なビーストまで、最もクールで速い車とカーレースできます。スティックシフトをマスターし、ニトロを賢く使って競争を打ち破る必要があります。このカーレースゲームはそのリアルな物理学と素晴らしいグラフィックスであなたの心を爆発させます。これまでプレイしたことのないようなものです。 GT Nitroは、リフレックスとタイミングを試すカーレースゲームです。正しい瞬間にギアをシフトし、ガスを思い切り踏む必要があります。また、大物たちと競いつつ、車のチューニングとアップグレードも行わなければなりません。世界中で最高のドライバーと車とカーレースに挑むことになり、ドラッグレースの王冠
昨日公開した、リアル・タイム・ページビューカウンター(RPV Counter)に関して、さっそくLingrの開発者の江島健太郎さんから「Webで読者が自分以外の人の存在の『気配』みたいなものが感じられるというのは面白いですよね。」というコメントをいただいた。それにに刺激されて今朝作ったのが「足あとライブ!」。自分の「気配」をもっと明示的に他の人に知らせる仕組みだ。 このブログの右上のページビュー・カウンターの下にある「足あとアイコン」は、クリックすると色を変えることができるのだが、その情報がCometサーバーを伝わって、同時にこのブログを見ている他の人のアイコンにも反映されるようになっているのだ。 ちなみに、Lingrとは、この「足あとライブ!」と同じく、CometサーバーによるPUSHの仕組みを使った「ブラウザ上で動くチャット」である。RPV Counterのデバッグ中に、クライアントか
最近Linuxの勉強もかねて作っているのが、超シンプルなアーキテクチャーのHTTPサーバー。そこそこ動き始めたのだが、それだけでは面白くないので、サーバー側からイベントに応じてデータをPushできるCometの機能を足してみた。 ストレステストのために、昨日からこのブログにこっそりとテスト用のIFRAMEを貼り付けてあったのだが(そのおかげで、バグを三つばかり見つけることができた―感謝、感謝^^)、安定して動き始めたので、見栄えを整えてこのブログの右上に貼り付けてみた。 題して、「リアルタイム・ページビュー・カウンター(RPV Counter)」。Totalはこのカウンターをリセットしてからのページビューの数、Currentはその時点でこのブログを見ている人の数(ただしノイズあり)、PeakはCurrentの過去最大値だが、ページを再ロードせずとも、それぞれのカウンターが自動的にアップデー
Lingrのユーザーは一部の地域に集中していますか、それとも広く分散していますか。 Lingrは、サービスの開始から数日で多くの国に広がりました。今のところ、最もユーザーが多いのはアメリカと日本です。 半年後、あるいは2年後に、Lingrはどうなっていると思いますか。 半年間は、ユーザーが集まりやすいようにすることに集中します。2年後には、Lingrが人々のウェブ上でのライフスタイルを変えている、というところまで行きたいですね。 プロジェクトを成功させるのに最も難しいことは何ですか。 Lingrを広めることです。 Lingrを次の段階に進めるためには何が必要ですか。 ブラウザのウィンドウを開いていない状態でもユーザーがオンラインかどうかを知らせる仕組みです。 Lingerはブラウザがコネクションを維持する仕組みをサポートしているのですが、ユーザーは他の人たちが来るのを待つためにブラウザのウ
« 突然、有名サイトに自分の写真が掲載されていたら | メイン | おとこのCometアプリケーション! 非モテのためのJetty 6 Continuation入門まとめ(後編:その1) » おとこのCometアプリケーション! 非モテのためのJetty 6 Continuation入門まとめ(前編) はじめに Jetty 6には、継続(continuation)という機構が用意されました。この記事では、その応用例であるCometによるウェブアプリケーションの実装を取り上げ、解説をします。 Cometでは、サーバプッシュ型アプリケーションを実現するために、サーバに対してHTTPコネクションを張り続ける必要があります。こうした接続の手法は、従来のHTTPサーバでは想定されているものではありません。 また、Cometが提供するイベントドリブン型のウェブアプリケーションでは、サーバ側や、クライア
2006/9/23 インフォテリアの米国子会社インフォテリアUSAが公開したチャットサービス「Lingr」が話題を呼んでいる。サーバからの情報をプッシュする新しい技術「Comet」を採用し、従来のチャットサービスと比べて極めて軽快な操作性を実現している。インフォテリアの代表取締役社長 平野洋一郎氏は「LingrはCometを活用した技術的なアプローチ。LingrのようなリアルタイムWebが今後注目されるだろう」と語った。 従来のチャットシステムはクライアントからサーバに対して数秒おきにポーリングを行い、新しいメッセージを取ってきていた。しかし、この仕組みではメッセージ投稿と表示の間にタイムラグが出てリアルタイム性が損なわれる、ネットワークに負荷がかかるなどの問題があった。また、クライアント側の操作性を高める技術として画面表示と非同期でデータをサーバから取得するAjaxがある。だが、Ajax
このニュースの意義は、ただ単にそのようなサービスが正式版として開始されたということではありません。本来、デスクトップ上のソフトウェアで最強企業であったマイクロソフトが、本格的にWeb上のサービスに取り組んでいるという点で、特に大きなインパクトがあるわけです。他社が同様のサービスを始めるのとは、意味の質が違います。 とはいえ、まったく個人的な見解を述べるなら、現在のマイクロソフトには統一された「マイクロソフトの意思」ないし「一貫した目標」のようなものは存在しないと感じられます。さまざまな方向性への試みが競合しているのが、現在のマイクロソフト文化なのではないか……と感じます。つまり、Windows Liveがこうして立派にサービスを開始したということが、そのまま「マイクロソフトの意思」であるとまではいえないわけです。マイクロソフトの別の部分は、別の意思を持ち、例えばデスクトップの世界を堅持しよ
さて、お待たせしました。いよいよCometとLingrについての技術解説です。 ■Comet解説 さて、まずはCometとは何で、どういう背景によって生まれたのか、についての解説から始めます。 まず前提として、Webアプリケーションにおいては、通信開始のトリガーは常にクライアント側が握っています。つまりURLを入力したりボタンをクリックしたときなどに通信が発生することになるわけですが、このようなアーキテクチャは、サーバ側で発生した変化をリアルタイムにクライアント側に通知することが原理的にできないことを意味します。 チャット・アプリケーションでは、複数のユーザから不定期にメッセージが送信され、それが他の参加者に一斉に配信されなければなりません。しかし、メッセージを受け取ったサーバ側では、それをクライアントに即座にプッシュで通知する方法がないのです。 そのため、一定期間ごとにブラウザがサーバに
AJAXは洗剤の名前!? スパムメールの“スパム”が、もともとアメリカに古くからあるハムの缶詰の商品名をもじったものだと知らない人はいまどき少ないだろうが、最近話題の“Ajax”(エイジャックス:Asynchronous JavaScript and XML)が、アメリカで販売されている洗剤のブランド名をもじったものだと知らない人はいるのではないだろうか。 WikipediaでAjaxの項を引いて、もう少し“Ajax”という名前の元をたどると、それはギリシア神話に出てくる英雄の名前だったり、小惑星の名前だったり、はたまた16世紀末にイギリスで発明された水洗トイレのことだったりするようだが、ここでは、それはどうでもいい。 IT業界では昔から製品名やプロジェクト名を付けるときに、まず略称ありき、という遊びがよく行われる。たとえば東京工業大学の大規模分散スパコン、“TSUBAME(ツバメ)”とい
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く