最近html5の方を勉強しているうちにwebrtcとwebsocketについて目についたので調べてみた。
WebRTCについては結構紹介記事が多い
webRTCを利用するとビデオ電話などが利用できる。
webRTCで使用されているAPIは結構難しく、ライブラリーを使用することを推奨している例が多い。
基本的には昔からあるようなp2pで通話を行うのだが、接続するまでにはシグナリングで双方が接続する仕組みが必要となる。
直接webrtcとwebsocketは関係はないが、シグナリングでwebsocketを利用しているものが多い。
私が実際試しているのは
SkyWay – WebRTCを簡単&柔軟に使えるプラットフォーム
PeerJS – Simple peer-to-peer with WebRTC
EasyRTC – Open Source WebRTC tools for Enterprise Developers
実際にサンプルがいくつかあるのでいろいろ試すことができるだろう。
どのように動かしているかは調べてみようと思っているが、webRTC自体難解なのでまとまった時間があるときにでも行うつもりである。
WebSocketを調べてみた
websocket自体は今まで十分に普及しているajaxの代わりに考えられたようである。
基本的にwebサーバーからクライアントにプッシュで送信することはできず、実際にはクライアントからリクエストをだしており、そのたびコネクションを張り直しが発生したり、コネクションを長期にわたり専有したりするのでリソースの問題が常にある。
それに対してwebsocketの場合はコネクションが一度はられたあとはずっとそのセッションを利用するのでajaxで起こったような複数回に渡る張り直しが発生せずその分早くなるといった仕組みである。
実際のサンプルを見てみた
websocketはnodejsなどを利用したサンプルが多いが、nodejsを学ぶことは後回しにもできるので普段良く利用しているnetbeansで行ってみた。
WebSocketをネタにJava EE 7正式版を試してみる – きしだのはてな
WebアプリケーションでのWebSocket APIの使用
(NetBeans 日本語サイト から)
きしださんは、「創るJava NetBeansでつくって学ぶJava GUI & Webアプリケーション[改訂第3版]」を書いている人で私も昔第2版を購入して勉強したことがある。
これら2つのサンプルではwebsocketを利用するとajaxに比べると高速になるといったデモではなく、チャットのデモになる。websocketを利用すると簡単にチャットの実装が行えるようである。
Netbeans 日本語サイトのサンプルは文字ではなく、ホワイトボードにクリックすると任意の色と文字が記録されるが、同時に接続しているクライアントにも同様に変化がするようになっており、要は文字のチャットよりも高度なことをしている例である。
ajaxよりもwebsocketが高速というデモは以下から見つけた。
WebSocket、WebRTC、ホームネットワーク、W3C標準化etc.通信エンジニアの習性は「何でもつなぐ」── 小松健作さん | HTML5Experts.jpに記載されている「Wakachi demo」になる。
細かい動作の説明がないのでわからない部分があるが、websocketのほうがかなり高速に処理が終わるということがわかる。
websocketって何だろう?
じつはwebsocketを利用するためにはいろいろな面倒なことを準備する必要がある。結構ここが普及を妨げる一因になっている気もする。
- websocketはコネクションの扱いが異なるため通常のwebサーバーが利用しているhttpではないプロトコルを利用している。
- そのため必要に応じてhttpサーバーとwebsocketサーバーを導入する必要がある。
- websocketをサポートしてるサーバーは限られている。現時点(2014/3/12)ではapacheはサポートしていない。
- 異なるプロトコルなのでプロキシー、ファイアーウォール、アンチウィルスによるブロックされる可能性がある。
仕組みを考えれば当然だが単純にjavascriptだけをいじればいいのではなくサーバー側にもプログラムを用意する必要がある。
また、違うプロトコルで動作させているために予期しない形で動作しない可能性もあり、サービス提供者としては絶対にwebsocketでないとダメだという判断ができないとなかなかwebsocketが普及しないかもと感じている。すくなくてもチャットやajaxの置き換えだけでは普及が進まないと思うのでそれが何か考えたい。
たまたまであるが、今日見たブログ 『大規模システムにWebSocket/ServerSentEventsは入れて良いのか? – ふろしき.js』 にも私が感じたようなことが書いてある。
おそらく、websocketを実装してきた人たちは具体的にしたいことを考えて作ってきたと思う。
多分実際に普及するまでにしばらく時間がかかると思うが、何か新しいことができるのか考えようと思う。
とりあえず日本だと記事が少ないので英語の資料から調べてみるつもりだ。