17753
iPhoneAからiPhoneBにメンバー変数の変化をリアルタイムに伝える方法で、  
サーバーを介しない方法は何かありますか？

例えば、iPhoneAでのXの値が、iPhoneBに瞬時に伝わるという事をやりたいのですが。

iPhoneAとiPhoneBの所有者は別で、iCloudアカウントが同一でない場合です。

iPhoneAとiPhoneBがBluetoothや同一のWi-Fiを共有できない  
長距離同士のやりとりをしたいです。

Lineアプリなどのように相手の端末を認証して、  
そこからの通知を受け取りたいです。

アドバイスよろしくお願いします。
CC BY-SA 3.0
2015-10-17T07:49:05.370
17749
2015-10-19T00:52:34.737
12297
question
swift
複数のiPhone間でサーバーを介しないでメンバー変数の値を共有する方法はありますか？
サーバを介しない通信を行いたいと言う事ですが、実現は出来ないかと思います。

仮に条件を無視して考えると  
まず、遠隔と言う事でBluetoothは使用できません  
VPNを立てなければ同一のLAN環境を構築することは出来ないでしょう。

では、遠隔の方への通信はどうするかと言うとソケット通信で相手へ通信する訳です。  
ソケット通信と言うと"TCP/IP"で通信するので相手のIPを知る必要があります。  
ですが、ソケット通信で通信を行うにしてもIPは動的に変化します。  
仮に固定したとしてもグローバルIPを固定するサービスを行わなくては実現できません。  
では、どうやって相手のIPを知ることが出来るのでしょうか？

サーバにIPを保存するしか手はありません。

自分たちで使用する分であれば自分でIPを確認し伝え合う事も出来るでしょうが、  
恐らくそういう事ではないのですよね？  
例に挙げているLineのアプリですが、  
Lineもサーバは使用しています。  
韓国に2台、アメリカ・日本に1台ずつの4台です。

以上、私が知る限りでは方法はありません。  

* * *

  
あまり記述しても主題からそれてしまうので最低限知っておけばいいものとして

```

    ・データベース(MySQLなど)
    ・サーバ側で使える言語(PHPなど)
    ・サーバとの通信方法の考察(HTTP通信でJSONを取得するなど)
    
```

これだけあればサーバとデータの通信ができます。

実現したい内容を察するに流れとして

```

    １．端末をサーバに接続し`独自のID`や`UUID`(作る必要はありますが)と紐づけ
    ２．端末起動中は定期的に通信し、起動中の旨を保存
    ※呼び出し側
    １．クライアント側でユーザリストなんか作って選択
    ２．自分のIPをサーバに保存、呼び出し
    ３．相手側の応答後、相手のIPを取得する
    ４．ソケット通信
    ※受け付け側
    １．未起動時の場合、PUSH通知
    ２．起動している際にサーバに紐づけているIP更新
    ３．ソケット受信待機
    
```

こんな感じでしょうか？  
細かいことを言えばキリがないですが、  
サーバに高い負荷をかけるならサーバ構築の技術も必要です。  
インフラ関係の技術は得意分野ではないですが、  
テスト環境だけならLINUXとか無料ですし、VM使うなりで練習してはいかがでしょうか？
CC BY-SA 3.0
2015-10-17T09:12:01.337
17753
2015-10-19T00:52:34.737
2015-10-19T00:52:34.737
17749
answer