2012-03-19 9 views
5

私は、ユーザーがbonjourプロトコルを使用してメッセージをお互いに送信できるようにするiPhone/iPadアプリを実装しています。基本的に、サーバーはBonjour上にサービスを公開し、同じ無線LANに接続しているクライアントは自分のサービスを検出して接続してメッセージの送信を開始できます。私が見つけた問題は、一部のルータでBonjourに問題があるように見えることです。自宅で、または他の場所で私のアプリを実行するとき、それは完全に動作します。 Bonjourサービスの公開と発見は完璧に機能します。しかし、私の友人のアパートでアプリを試したところ、一部のクライアント(すべてではない)が公開されたbonjourサービスを発見できませんでした。 Bonjourを使用している他のアプリ(AppleのRemoteアプリなど)もまた、このネットワークに問題があることに気付きました。いくつかの掘削をした後、私は他の人がbonjourといくつかのルータで同様の問題を抱えていることを発見しました。したがって、私は2つの質問を持っています:iPhoneのピアツーピアにBonjourプロトコルを使用する代わりに

1)誰かが、Bonjourにこのようなルータが持つような問題が広がっているかどうか知っていますか?言い換えれば、もし私のアプリがBonjourをまったく機能しないようにするには、WLANネットワークの50%で動作しないか、ほとんどのルータがBonjourに問題がないことを心配する必要があります。明らかに私は誰もがそこにあるすべてのルータがbonjourパケットをどのように処理するのか知ることは期待できませんが、正しい方向に私を向けるNetworking Gurusがいるかもしれません。

2)次に、bonjourがアプリケーションを構築するプロトコルがあまりにも危険な場合、同様の機能を備えた代替手段はありますか?私が望む(できれば)機能は、ユーザーが手動で他の電話機のIPアドレスを入力する必要がなく、サービスの公開と発見になります。

よろしくお願いします。私はこれが広い質問のようなものだと理解していますが、どんな助けもありがとう! :)

+0

上記のルータにクライアントからクライアントへの通信を有効にする設定があることを確認できますか?一部のWLANルータは、クライアントを互いに「隔離」します。これがどれほど広まっているかについては、この機能を備えたルータがかなりあります。クライアント分離が有効な場合、他のサービス検出プロトコルは2つのクライアント間で直接には機能しません。 – ldx

+0

こんにちは。ヒントをありがとう!私はそれをチェックする必要があります。問題は友人のルーターを思いついたので、私は彼女の場所でチェックアウトする必要があります。 –

答えて

3

これは潜在的にひび割れの厳しいナットです。デバイスが特定のネットワーク上でお互いを見つけられない原因となる問題は、Bonjour(またはmDNSなど、あなたがそれを呼びたいもの)ではなく、基礎となるトランスポート(すなわちマルチキャストUDP)に関連しています。

厳密には厳密ではないが、マルチキャストデータはルータに負荷をかけます。大規模な企業ネットワークや大学ネットワークでは、Bonjourメッセージ(つまり、マルチキャストグループ224.0.0.251のポート5353に送信されたUDPパケット)がドロップされることがあります。これは、数千のクライアントがiTunesライブラリなどを宣伝しているということです。一般的なパフォーマンスを向上させます。他の端では、一部の国内のルータは、製造元だけが知っている理由から、マルチキャストパケットを箱から落としてしまいます。どちらの状況についてもあなたができることはたくさんありません。

tcpdumpをネットワーク上で実行して、パケットが実際に通過しているかどうかを確認してください。私はしばらくの間彼らを転送しない家庭用ルータに出くわしたことはありません。もしそうでなければ、中央の[インターネットに面した、おそらく?]ルックアップ機能を考えなければならないだろう。表示されている場合は、実装に問題があります。

サービス発見のための独自のより簡単なプロトコルをマルチキャスト経由で送信するのを妨げるものはありません。すでに多くの異なる言語でBonjourクライアントが読み書きされているだけです。

関連する問題