ここ数日、Websocketは未だに時期尚早なのか、それともそうじゃないのか気になって調べてた
そういえばこんなのあるよね、って結構前から思っていましたが、使えるのではと思われる機会が出てきそうなので少し調べていました。
そもそもWebsocketとは?
XmlHTTPRequestの欠点を補うべく策定中の、今個人的に気になっているサーバーとクライアント(特にことわりがなければWebブラウザ)で、TCPによる双方向通信を実現するものです。なおプロトコルの文書自体はすでに出来上がっていて一応標準化されています。
Ajaxという技術の出現によって、HTTPによってサーバーとクライアントで頻繁に通信をする機会が増えました。しかし、これを支えているXmlHTTPRequestはあくまでもクライアントからサーバーにリクエストを投げるもの。サーバーから何かを送り出すPush通信は難しいとされています。
そこでCometというものが発明されたわけですが、これはリクエストからレスポンスまでの間が非常に長い通信を何度も繰り返すことで(ロングポーリング)、あくまでも擬似的にPush通信を実現しているだけです。サーバー側から返事がなくてもリクエストがタイムアウトする前後で息継ぎをするように何度も再接続を試みる必要がありますし、サーバー側もそれに対応した実装をしていないと無駄なリソースを消費することになります。
そこでWebsocketの登場です。Websocketの場合は能動的か受動的かにかかわらず、接続が切れるまでの間コネクションを張りつづけ、そこを軽量なプロトコルで双方向通信できるようにします。これにより、頻繁にリクエストを投げ直す必要もなくなり、その分リソースの無駄がなくなります。
Websocketの実装状況
2013年1月辺りの状況です。
デスクトップブラウザ
主要なデスクトップ向けWebブラウザの最新版は全て実装済みです。ただし、IEは10からの実装で、今の所バージョンシェアトップの9は対応していません。日本に限っていえば、次点トップの8とも合わせると全体の半数以上が非対応ということになってしまいます。