Google Chrome開発版でsocket APIを試す
Google Chromeの開発版で、拡張機能APIにソケット通信が追加されたそうだ。ネットワークプログラミングマニアとして、早速ドキュメントを読んでみた。
- 参考: Chrome supports TCP & UDP Sockets
- ドキュメント: http://code.google.com/chrome/extensions/experimental.socket.html
しかし、参考ページにあるサンプルコード通りには動かなかったので、ドキュメントとエラーメッセージを見ながら実際に動くものを作ってみた。ちなみに、experimental.socket.html
はドキュメントのどこからもリンクが張られていないので、まだ本当に実験段階の「使われるレベルにない」APIのようだ。
動作環境としてGoogle Chrome 21.0.1137.1 canary (Windows/Mac)を用いた。
まず、拡張機能でexperiment APIを使えるように、chrome://flagsの設定を変更し、再起動する。
次に、manifest.json
に"permissions": ["experimental"]
を記述した拡張機能を作り、Chromeの拡張機能管理画面から読み込む。
拡張機能のソースに同梱したtcpserver.py
、udpserver.py
は単純なTCP/UDPソケットサーバの実装になっている。あらかじめ、Google Chromeが起動しているマシンで動かしておく。
拡張機能管理画面に表示されたこの拡張機能のbackground.html
のInspect views (Developer tools)を開く。JavaScriptコンソールでexperimental.socket.*
を使ったコードを書いてテストする。
ドキュメントにはsocket-typeとして'udp'で無ければならないとあるので、UDP通信のみをテストした ('tcp'を指定することも出来るようだが、通信を確認できなかった) 。
また、chrome.experimental.socket.write(..)
の第2引数がstringとあるが、文字列を入れるとエラーになったため、APIのテストコードを参照し、文字列をArrayBufferに変換したデータを渡している。
// JavaScriptコンソール上で > udp_socket_writer("127.0.0.1", 9998, "hello") undefined ▼Object bytesWritten: 5 > udp_socket_writer("127.0.0.1", 9998, "こんにちは、そけっと") undefined ▼Object bytesWritten: 30
$ python udpserver.py # ターミナル上でUDPサーバが動作している ('127.0.0.1', 62019) wrote: hello ('127.0.0.1', 51649) wrote: こんにちは、そけっと
UDPサーバにデータが送られていることを確認できた。逆にChrome側をサーバとして動作させることも出来るらしい。Webブラウザ同士のP2P通信実装も夢ではない。