サーバーを実装せずにソケットを介して複数のデバイスを接続したい.登録するデバイスのIPアドレスを取得するためだけに使用します。
4 に答える
ピアツーピア通信には、検出と到達可能性という 2 つの主要な問題があります。
まず、接続する他のピアの IP アドレスを知る必要があります。ピアのメッシュに接続すると、それらはすべて、ネットワークの状態を互いに最新の状態に保ち、より良いピアを互いに提案したり、参加および離脱した新しいピアの通知を渡したりすることができます。その情報を取引するためのメカニズムを設計および実装すること。さらに重要なことは、新しいピアが起動すると、それ自体のメッシュ内にあり、それ自体に提供する情報がないため、何らかの方法で物事をジャンプスタートする必要があることです。
1 つの可能性は、常に接続されている少数の有名な "スーパーピア" (実行する) を用意し、それらのアドレスをアプリに焼き付けることです。または、ピアの代わりに「導入サーバー」を使用して、ほぼ同じ機能を提供することもできます。または、アドレスを取引する外部の方法 (最も簡単なのは、ユーザーが Web フォーラムまたは IRC チャネルで、または直接取引して手動で入力することです) を使用することもできます。これは、さまざまな程度に自動化できます。役立つショートカットもあります。Bonjour は、LAN 上に 1 つのピアがすでに存在する限り、他のピアをメッシュに接続できます。GameCenter/GameKit は、自動化された外部取引ネットワークとして使用できます。等
発見の問題を解決しても、まだ到達可能性の問題があります。通常、ほとんどの iOS デバイスには、公的にアクセス可能な IP アドレスはありません。代わりに、それらはネットワーク アドレス変換を行うルーターの背後にあり、それが家庭の WiFi ルーターであろうと携帯電話会社の 3G ネットワークであろうと関係ありません。つまり、2 台の iPhone を互いに通信させるには、NAT ホール パンチングを実行する何らかの方法が必要です。各デバイスのパブリック アドレスと内部アドレスの両方を知っている人は、それらが相互に接続するように手配できます。通常のピアにこれを実行させるか (ジャンプスタートの問題がさらに大きくなります)、スーパーピア/導入サーバーなどに実行させることができます。やれ。
これらすべてを自分で構築したい場合は、おそらく他の実装を検討することをお勧めします。BitTorrent (トラッカーと DHT を含む) はよく理解されており、好奇心旺盛なエンド ユーザー向けの「子供向けの嘘」から詳細なプロトコル仕様やオープン ソースの実装まで、一連のレベルで文書化されています。そして、他の P2P ネットワークを見てみましょう。BitTorrent は完璧ではなく、誰もが思いついたすべてを実行しようとはしないからです。
私は似たようなことに取り組んできましたが、それはお尻の大きな痛みです。3 つの考慮事項があります。1) 到達可能性 2) 検出 3) 接続自体。
1) 3g/4g を使用することさえ考慮しないでください。オープン ソケット接続を維持するにはうまく機能しません。
2) インターネット上の 2 つの間である種のブローカー サービスを使用して、2 つを接続します。発見のために、サービスで利用可能なデバイスをリストするだけです。
3) 接続に関しては、IOS ソケット ライブラリを使用するのはかなり面倒だと思いますが、BSD ソケット レベルまで下げれば、それほど悪くはありません。zmq ソケットを使用するのは非常に興味深いと思います。これにより、ブローカー サービスの記述が簡素化される可能性があります。
できません。デバイスがすべてwifiでオンラインになっている場合は、PC接続と同じようにルーターの設定に依存する可能性があります。一部のデバイスが3gまたはgprsプロトコルに接続されている場合、それらのデバイスにはIPアドレスがまったくない可能性があります。