2016-05-15 21 views
1

私はWebアプリを実行するいくつかのiPadsを持っています。 Webアプリケーションは、signalRを使用してサーバーと通信します。これは、サーバーが特定のiPadに特定のデータを送信する必要があるためです。したがって、どのiPadがオン/オフであるかを把握する必要があります。SignalRを使用してモバイルデバイスで切断イベントを処理する方法は?

iPadには、アプリケーションをスリープ状態にする以下の方法があります。

  1. iPadは
  2. ユーザーをスリープ状態になる

がどのように私は、サーバー上でこれらを検出しない

  • iPadはメモリ不足サファリ殺しますか?だから私は彼らにデータを送らないことを知っている。 切断イベントを試しましたが、それには時間がかかります(デフォルトでは45秒程度)。

  • 答えて

    1

    簡単な答えは、接続がタイムアウトするまでわからないということです。これは、SignalRが以前には分からないためです。

    あなたがトラップすることができるようなものであっても、iPadをトラップすることができます - スタンバイに移行するiPad - あなたの接続をきれいにするJavaScriptコードを取得できるという通知はありませんそれが起こる前に。

    クライアントに送信するデータの性質によっては、サーバーがクライアントに最小限のデータパケットを送信してデータがあることを通知するデータ利用可能通知形式に切り替えることでバッファリングを最小限に抑えることができます取り出されるのを待ってから、クライアント側に情報を要求させる。場合によっては、アプリケーションまたはトランスポート層でバッファされるデータの量が大幅に削減されることがあります。

    もちろん、通知ごとに数キロバイトのデータがあり、それらをすべて逐次配信に保存する必要がある場合は、トランスポート層でのバッファリングを減らし、ステップを元に戻してアプリケーションの責任にします。

    もう1つの方法は、クライアントがJSタイマーインスタンスから実行中のハートビートを送信させることです。 1秒おきに(必要なリアルタイムに応じて)、クライアントはサーバ上のメソッドを呼び出し、基本的にはどれがまだライブかを知ることができます。いくつかの失敗したチェックイン(たとえば、聞いたことがない5回のヒアビート)の後に、クライアントがなくなったと仮定して、情報の送信を停止することができます。サーバーは各クライアント接続の最後のハートビートを追跡する必要があり、特定のクライアントに何かを送信するたびに、最近チェックインしたかどうかをチェックするだけです。そうでない場合は、データプロバイダに再度チェックインするまでクライアントがオフラインであることを知らせます。その時点で、リロードしてやり直す必要があるかもしれません。

    関連する問題