iPhone アプリをつくってて、 Bonjour をつかえばいろいろと楽しいことができるんじゃない? と調べていました。ここまでのところをシェア。
Bonjour というのは、 DNS サーバがなくても、同じネットワーク内にいるコンピュータを見つけあうことができる技術。 Zero Configuration とか Rendezvous とか言われてたりもした。
準備
遊びでつかうなら、 service type = _wwdcpic あたりでローカルで遊ぶといいんじゃないかな。
本気でつかうなら、dns-sd にサービスの登録をする。 サービス名、説明、責任者といった情報をつけてメールすれば、そのうち受理されたりする。
Cocoa API
いいところ:
- 使いやすく抽象化されてる
- Mac, iPhone どちらでも同じように使える!
ちゃんと RubyCocoa でも使えたよ!
NSNetService
サーバ側。サービスを提供していることをアピールし、クライアントから接続されてくるのを待つ。
ながれ:
- initWithDomain_type_name_port
- setDelegate
- publish
ここの type で指定するのを、 dns-sd に登録しておくということ。 クライアントとのやりとりは delegate のコールバックに通知される。 接続されたあとの処理は、ふつうのネットワークプログラムとおなじ。
NSNetServiceBrowser
クライアント側。サーバをてきとうに探し出して、接続する。
ながれ:
- init
- setDelegate
- searchForServicesOfType
みつかったあとのサーバとのやりとりは、 delegate のコールバックに通知される。
Sample code
/Developer/Examples//Foundation/PictureSharing
このコードを読むと、だいたい把握できる。
あと、自分で書いたコードが github:remoteshortcuts にあります。 Mac with RubyCocoa, iPhone とごちゃまぜなかんじがたのしいかと。
つまづきポイント
- NSNetService は、 stop を送られたあとにもう一度 publish で起動しようとしてもダメ (しぬ)
- delegate を設定する前にメッセージを送っても意味なし
まとめ
想像以上にかんたんに使えました。 Cocoa フレームワークはすばらしい。 iPhone アプリどうしで小さなネットワークをつくって遊ぶようなときにさくっと使うと楽しそうです。勉強会とか。
日本語