1

これは特定のコーディングに関する質問ではありませんが、ファイブ ナインの通信ソフトウェア開発で長年の経験を持ち、Web アプリの世界に足を踏み入れたばかりの初心者へのベスト プラクティスのアドバイスです。

複数の組み込み (Arduino) デバイスからデータを収集する ASP.NET Web アプリケーションがあります。デバイスは、単純な HTTP GET 要求を介して定期的にデータをプッシュします。通常の状態では、各デバイスは 30 秒ごとに 1 回データをプッシュします。ただし、デバイスが失われたり、デバイスからサーバーへの接続が失われたりする可能性があります。2 ~ 3 回の通常のデータ レポート サイクル内でこの状態を検出する必要があります。

典型的なスタンドアロン C# アプリケーションの場合、有効期限が最大タイムアウト期間に設定されたデバイスからデータを受信するたびに、タイマーを開始します。タイマーの期限が切れた場合、これは、デバイスからの応答が長すぎることを意味し、アプリケーションからアラート (電子メールなど) をトリガーする必要があります。

したがって、非アクティブ タイマーのアプローチは、永続的ではない接続を使用するスタンドアロンの常時接続アプリケーションでは非常に一般的なようです。しかし、ASP.NET Web アプリでこれを行う正しい方法は何でしょうか? この種のタイマーを HTTP 要求ハンドラーの外部で実行することはできますか?

私は考えられる解決策を探しましたが、人々はブラウザ セッションのタイムアウトなどについてより多くの質問をしているようです。私の問題は、次の点で異なります。

  1. セッション状態の追跡ができない非常に軽量なクライアントがあります
  2. アラームがあるまでシステムと対話していないユーザーに警告/警告するために、非アクティブをタイムリーに検出する必要があります

知恵を分けていただきありがとうございます。

4

1 に答える 1

1

サーバーにデータを追加するために get を使用している場合は、最初に post に切り替えることをお勧めします。次に、何らかのトークンを使用してみてください。ユーザーが行う最初の要求 (get 要求) は、アクセス トークンを取得できるエンドポイントに対して行う必要があります。次に、データをプッシュするために post 経由で接続するたびに、ヘッダーからアクセス トークンを取得します。トークンがまだ期限切れかどうかを確認します。問題がなければ、リクエストを処理し、新しいアクセス トークンで応答します。アクセス トークンの有効期限が切れている場合は、エンドポイントに移動して新しいアクセス トークンを取得します。

アクセストークンについては、一定時間後に失効するように設定できます。あなたは次のようなことをします:

var timeDiff = DateTime.UtcNow - AccessToken.DateTime;
if (timeDiff.Minutes > 3)  // expired
else                       // still good

アクセス トークンを取得するには、それよりも多くのコードが必要ですが、これはユーザーが実行するようなものです。

編集

javascript にはinterval、別のスレッドでループできる命令があり、一定期間遅延します。アクセストークンの有効期限が切れるかどうかを確認するために実行することができます。有効期限が切れるまで(または何でも)1分ほどある場合は、ユーザーにプロンプ​​トを表示します。サーバー側にも何かを用意するのが最善の方法です

于 2014-07-27T18:23:41.297 に答える