ブラウザー間直接通信で広がる世界と課題
先日、「P2Pアプリがブラウザー上で動作する!?」 というエントリーを書いたが、Skypeの解説本著者として知られ、今はアメリカで某検索エンジン企業に勤めているIKeJIさんから興味深い記事を紹介してもらった。
ブラウザというプラットフォームの為の基礎技術~ブラウザ間通信~
とても興味深い。是非P2P勉強会で講師として話して欲しいぐらいだ。
技術的には
・JavascriptだけでなくActionscriptも併用。
・ユーザはProxyサーバを立てる
といった感じ。Proxyサーバを使うのは、Javascript+ActionscriptだけではTCPの待ちうけができないため。(現在の検討では。)
本当はProxyサーバを立てずにできればすごいのだけども。この辺りは他の人の考察待ちかな。JavascriptやActionscriptでUDPがうまく使えれば話はまた変わるかも。UDPができればUDP hole punchingとかもできてNAT越えがやりやすいのだけども。あとは接続の問題も簡略化できる。
さて、仮にJavascriptやActionscriptだけでブラウザー間通信ができたらどのような世界が広がるだろうか?今日会社から家に戻る間に考えてみた。
□何ができるのだろうか?
☆Webサーバの負荷分散、キャッシュ
Webサーバからのリダイレクトによって、一部の処理を他のブラウザーが肩代わりすることはできそうだ。既に閲覧したコンテンツを他のユーザに見せたり、重いページの表示を軽くするために使ったり。これが一番実用的かも。
Ajaxとかに応用できると楽しいけども、ブラウザーがそのコンテンツを利用している時間(生存時間)が課題かな。生存時間が短いようなコンテンツにはこの方法は向かない。ブラウザーがもう他のページに移っているとこのシステムが利用できないので。
☆双方向コミュニケーション
紹介した記事にもあるようにチャットができるだろう。Javascriptだと音声を扱うのは難しいけども、Actionscriptをうまく駆使したらなんとかなるかな?(楽観的な予想というよりも希望)
☆コラボレーション
複数人で編集できるような簡易なページ(例えばWikiやスケジューラー)を作ることも可能だろう。BBSやアンケートページもこのカテゴリーかな。
☆グリッド的なアプローチ
ブラウザーによってなんらの計算をさせることも可能だろう。でも何をさせるとうれしいのかはまだ自分の中で整理できてない。
□何が課題なのか?
☆NAT越え
TCP hole punchingのようなSocket周りをゴリゴリいじる事をJavascirptやActionscriptによって実現するには正直厳しい。端末がグローバルIPアドレスを使えるかどうかで、適切な端末が通信をリレーしてあげることが必要だろう。(Skypeのリレーノードみたいな感じ。)ちなみにTCP hole punchingはそのうち解説する予定。
☆セキュリティ
Javascriptでサーバ機能を作るとなると、当然その部分がソースが平文で見える。となると、攻撃者によってソースを解析して意図しない動作をさせることは比較的容易に実現できると考えられる。対策としてJascriptソースの隠蔽が考えられるが残念ながら完全に隠蔽できることは難しい。
ゆえにJavascriptの完全性の担保をすることが解として考えられるが、これも難しそうだ。
不測の事態に備えてクライアント側でJavascriptによるセキュリティ対策が必要となるだろう。
☆コンテンツの永続性
たとえばチャットやWikiなどをこのページで作ったとしても、この機能だけではその内容を維持することは難しい。なぜならあるページにおいて閲覧している全員のブラウザーを閉じてしまったらコンテンツは消えてしまうから。何らかの形でコンテンツをサーバにアップすることが必要だろう。
☆Javascriptエンジンにまつわる課題
ブラウザーの作りにもよるが、Javascript+Actionscriptによるプログラムの暴走、多くのブラウザーからのアクセス、攻撃者によるアタック等によってブラウザーが耐えられるかという課題がある。ChromeのようにJavascriptエンジンがマルチスレッドであれば問題ないかもしれない。
時間があまりなかったので今日はここまで。もうちょっと考えてみよう。
いずれにせよ、ブラウザー間通信は旬になりつつある。考えてみると研究的にも開発的にも面白いと思うよ。
| 固定リンク
「P2P」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント