2017-06-18 9 views
1

私はsocketioクライアントが接続に成功した後にノードサーバーにIDを送信するチャットシステムを持っています。したがって、ユーザーがアプリを使用しているときはノードサーバーに常時接続されていますが、アプリが閉じると接続も閉じます。だから私が望むのは、アプリケーションが実行されていなくても、クライアントをサーバーに接続し続けることです。私はアプリのWebviewを使用しています。アプリケーションが実行されていなくてもsocketioとnodejs接続を有効にしてください

質問:アプリが実行されていないとき、どのように、socketioとノードサーバに接続し、JavaScriptを使用して、いくつかのデータを送信するには?

ありがとうございます。

答えて

0

クライアントIDを生成するノードにエンドポイントを作成し、クライアントがそれらに独自のIDを発行して接続したときに、あなた自身のIDとsocketio IDを関連付けます。次にエンティティのあなた自身のIDを参照してください。ライブラリーのIDを自分のものとして使用することは、後でどのような場合でも苦痛になります。クライアントが再接続すると、カスタム発行したIDを提供し、中断した箇所を取り上げることができます。これにより再接続が可能になり、この問題を回避する必要はありません。

これはすべて、非常に難しいであるため、接続が決して閉じることのない程度まで100%の稼働時間を維持すると言います。それほど実用的ではない。アンドロイドアプリが再起動した場合、socketioが提供する一時的なIDに依存すると、すべての状態がリセットされます。バックエンドが再起動した場合は、プロキシが動かないなどします。その後、正方形に戻ります。

つまり、私は接続と転送のデータを受け取るだけのソケットサーバーと、一日中再起動できる第2のサーバーを構築し、最初のサーバーを呼び出す責任がありますデータを送る。

これを拡張したい場合は、たくさんのソケットサーバーを持ち、rabbitmqなどのキューイングシステムにバインドさせ、イベントが発生したときに接続しているクライアントのイベントを購読しますソケットに書き込むことができます。次に、他の制御サービスがキューにイベントを発行してソケットにイベントを発行させます。こうすることで、ビジネスロジックの再デプロイをサーバーから引き離して、アンドロイドクライアントとの接続を維持できます。

は、さらに別の解決策はあなたのために、これらの問題のほとんどを処理するhttps://www.pubnub.com/ようなものを使用することができます。

最高の運があります。

+0

あなたの答えはありがとう、あなたはその面で正しいですが、私は本当に質問を混乱させて申し訳ありません。私が知りたかったのは、私が尋ねたものよりもずっと簡単です。クライアントがサーバーに送信するIDは、そのユーザーに固定されているか静的であるため、問題ではありません。問題は、アプリケーションが終了または再起動するときにIDがサーバーから削除されるため、サーバーはそのクライアントの手掛かりがないということです。ですから、私が知りたいのは、socketioを使ってアプリケーションが実行されていないときに、バックグラウンドでサーバーに接続して、同じIDを送信する方法です。 – atx

+0

@atx、アンドロイドアプリはバックグラウンドでも接続を維持しますか?私が理解していることから、ここではいくつかのイベントを再接続して中断することができますが、あなたはそれを生き続けることはできません。一時停止して再開したときに、アクティビティで使用可能なライフサイクルフックを調べます。 – Catalyst

+0

アクティビティ/アプリが一時停止されて再開されたときに接続がすべてOKです。この問題は、アプリがユーザーによって閉じられたときに発生します。私はバックグラウンドで動作しているAndroidサービスを使って 'var socket = io( '0.0.0.0:8000')'というサーバに接続するjs関数を呼び出すと、そのトリックが実行されると思います。あなたはどう思いますか? – atx

関連する問題