私はリアルタイムのチャットと写真共有のアプリケーションに取り組んでいます。サーバー側として Flask を使用して RESTful Web サービスを構築し、Ionic フレームワーク (AngularJS) を使用してモバイルでクライアントを構築しています。
ユーザーの新しいフィードを返す Web サービス エンドポイント [GET] /feeds/user_id があります。次のコード行を使用してアプリを初期化すると、localhost とモバイルで実行されているアプリケーションの両方からデータを正しく取得できます。
app.run(host='0.0.0.0', debug=True)
リアルタイム チャットでアプリをビルドするときは、Flask-SocketIO を使用し、公式ドキュメントで指定されているように、アプリを初期化する方法を以下の方法に変更します。
socketio.run(app, host='0.0.0.0', policy_server=False)
ただし、上記の初期化方法ではモバイルアプリからデータを取得できません。サンプル ログの 1 つを次に示します。
192.168.1.100 - - [2015-09-13 23:38:32] "GET http://192.168.1.101:5000/feeds/1 HTTP/1.1" 404 342 0.002000
ただし、同じリンクを使用して、ローカルホストと同じネットワーク内の別のマシンからデータを取得できるため、サーバーがすべてのパブリック IP をリッスンしていると確信しています。ファイアウォールも無効にしました。
以下の私のコードスニペット:
from app import socketio, app
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0', policy_server=False)
# app.run(host='0.0.0.0', debug=True)
どんな助けでも大歓迎です!
更新: app.run() のみを使用すると、ログは次のようになります。
192.168.1.110 - - [20/Sep/2015 00:17:23] "GET http://192.168.1.103:5000/feeds/1 HTTP/1.1" 200 -
Miguel が述べたように、これは奇妙なログですが、Flask の堅牢性のおかげで機能します。
また、iOS でアプリを実行しようとしましたが、これは完全に正常に動作します。今、私はそれが Android プラットフォーム上の Ionic フレームワークの問題であるか、単に私のデバイス上にあると考えています。私の端末は Nexus 7 Gen 1 で、Android 5.1.1 を実行しています。