リアルタイムWebの代名詞としてWebSocketに注目が集まる中、あまり話題になることはありませんが、HTML5には、もう一つリアルタイムWebを実現するAPIとして、忘れてはならないもの〜Server-Sent Events〜があります。今日は、そのお話。 Server-Sent EventsはCometを簡単に使えるようにするAPI。ここで、Cometと言うと最近の風潮として「WebSocketに完全にreplaceされる、ワークアラウンドでしょ」的な空気が(最近は特に)流れがちですが、そんなことは決してありません。。。というのが筆者の意見です。 Cometは、HTTPでサーバーPushするための技術の総称。その中の一つで良く取り沙汰される、periodically polling(一定間隔で、ポーリングパケットを投げる)などは、確かに「ワークアラウンドだね」という言葉ですませていい
Google I/O 2010ではApp Engine関連の大きな新機能発表がいくつかありましたが、「Channel API」もそのひとつ。これは「Webブラウザとのpush通信(comet)のためのAPI」です。 ついにpushできるよ! これまでApp Engineにおいてクライアントへのpushを行うには、 XMPPプロトコルを通じてのXMPPクライアントへのメッセージ送信 URLFetchを用いて外部のpushサーバー(WebSocket対応サーバーとかTornadoとか)経由でへWebブラウザにpush(例:松尾さんのwebsocket連携) のいずれかしか手段がありませんでした。 しかしXMPPクライアントの実装は容易ではなく、とりわけApp Engine側のXMPPサーバーとしてGoogle Talkサーバーを用いる場合はTLS通信が必須となり、利用可能なクライアントが極端に
NGINX HTTP Push Module is now obsolete. It has been remolded, reworked, and rebooted into Nchan, which is 99% backwards compatible with the Push Module. You should really upgrade, unless you don't want to. About This module turns Nginx into an adept HTTP Push and Comet server. It takes care of all the connection juggling, and exposes a simple interface to broadcast messages to clients via plain ol
原文(投稿日:2010/03/19)へのリンク ブラウザベースのアプリケーションで通信を行うためのテクノロジは,現在のところ2つある。Bayeux (別名 CometD) と,それより新しい WebSocket だ。どちらが優れているだろうか,あるいは,共存できるのに十分なだけの違いがあるのだろうか? CometD フレームワークは Bayeux プロトコルの実装であり,信頼性の低いネットワーク上で,クライアントとサーバ間の複数チャネルの非同期通信ストリームを実現する。数多くの言語 (JavaScript,Java,Perl ...) から使用できるが,ブラウザベースの AJAX アプリケーションでの利用が圧倒的に多い。Bayeux のアドバンテージは,新たな情報を受信した時に行う非同期/バックグラウンド処理を,ブラウザが提供する HTTP 通信サービスのみで実現可能なことにあり,Goog
What is it? Faye is a publish-subscribe messaging system based on the Bayeux protocol. It provides message servers for Node.js and Ruby, and clients for use on the server and in all major web browsers. Who uses it? 1. Start a server var http = require('http'), faye = require('faye'); var server = http.createServer(), bayeux = new faye.NodeAdapter({mount: '/'}); bayeux.attach(server); server.listen
サキとは彼女の自宅近く、湘南台駅前のスーパーマーケットで待ち合わせをした。彼女は自転車で後から追いつくと言い、僕は大きなコインパーキングへ車を停めた。煙草を一本吸ってからスーパーマーケットへ向かうと、ひっきりなしに主婦的な女性かおばあちゃんが入り口を出たり入ったりしていた。時刻は午後5時になる。時計から目を上げると、待たせちゃったわねと大して悪びれてない様子でサキが手ぶらでやってきた。 お礼に料理を作るとはいえ、サキの家には食材が十分足りていないらしく、こうしてスーパーマーケットに寄ることになった。サキは野菜コーナーから精肉コーナーまで、まるで優秀なカーナビに導かれるように無駄なく点検していった。欲しい食材があると、2秒間程度それらを凝視し、一度手に取ったじゃがいもやら豚肉やらを迷うことなく僕が持っているカゴに放り込んだ。最後にアルコール飲料が冷やされている棚の前へ行くと、私が飲むからとチ
scalaユーザー会が立ち上がりました。 ご案内:Scalaユーザ会 5/22(金)19:00-21:00@新宿三井ビル34F豆蔵 - HHa(H派)メモ ってことで、Liftについて発表してきました。 20090522 Scalaユーザー会#1 今回から資料をkeynoteで作ってkeynote remoteでiphoneからスライドを制御してやりました。 うまくいった。 けど、ちょっとネタがすべり気味だったのが反省です。 デモでは、Twitterのpublic timelineをcometで流すのもこんなに簡単に書けるんだよーって感じで見せましたが、時間が無かったのでコードをじっくり解説できなかったのが心残りではあります。こんなコードです。 package com.yuroyoro.scja01ex.comet import java.net.{URL, HttpURLConnecti
HTTPプロキシを通してCometサーバーに接続する場合や、1つブラウザで複数のタブを開いてCometサーバーに接続する場合、同時接続数制限が問題になる。 Cometでは1つのリクエストに対して応答を遅らせるため、クライアント1台がコネクションを1本占有してしまう(pipeliningが無い場合)。 またRFC 2616に、サーバーに対して2コネクション以上張らないようにするべきと書いてある。 ここで、HTTPプロキシの裏に複数のクライアントがいる場合などは、クライアントが3台いるのに2本しかコネクションが使えなかったりする。そうすると1台はリクエストをサーバーに投げられず、サーバーからメッセージを受け取れない。また、クライアントからサーバーへメッセージ送れなくなってしまう。 サーバーから見ると、クライアントがいなくなったのか、同時接続数制限でリクエストが到達しなくなってしまったのかは区別
上を行くかどうかは知りませんが :-p Ajaxはクライアントの都合でサーバーに通信を仕掛けるpull型の通信ができ、Cometはサーバーが好きなタイミングでクライアントへデータを送りつけるpush型の通信ができるわけですが、新たに双方向の通信ができる技術を開発しました。 具体的には、JavaScriptとサーバーの間で双方向のRPCができます。すなわち、サーバーからクライアント側のJavaScriptのメソッドが呼べるし、逆にクライアント側からサーバー側のメソッドを呼ぶこともできます。 サーバー側で call("addMessage", "Hello!") とやると、JavaScript側の function addMessage(msg) { ... } という関数が呼ばれたりします。 この技術を使って、試しにチャットシステムを作ってみました > デモ (ソースコード)*1 リアルタイ
Tomcat 6で実現!Ajaxを超える通信技術Comet:Tomcatはどこまで“安全”にできるのか?(3)(1/3 ページ) Ajaxを超える? Tomcat 6で搭載されたCometとは? 前回はTomcatを“安全”に活用するために、ツールを使った運用の仕方やTomcatの設定について解説しました。 今回はTomcatの安全性から少し離れて、Tomcat 6の新機能の利用方法について解説します。Tomcat 6では、いくつかの大きな拡張がありましたが、今回はJ2SE 1.5で実装されたNew I/O API(java.nioパッケージ)を用いたComet(コメット)通信について解説します。 おさらい 「通常のHTTPでの通信」 通常のHTTPでの通信はクライアントのWebブラウザなどからサーバへリクエストを送信し、サーバはリクエストを解釈してレスポンスを返します。つまり、通信のタイ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く