検索

ホームページ  >  に質問  >  本文

何千もの setTimeout を使用するとどうなりますか?

node.js を介してサーバー側に Web サイトがあり、ページが更新されるたびに新しいコードが生成されます。最後のコード生成から 24 時間が経過したかどうかを検出したいのですが、問題はこれを行うことです。 24 時間が経過したかどうかを明確にするために、ユーザーの IP に対して setTimeout() を使用すると、2 つの問題が発生します。1 つ目は、簡単に IP を変更して新しいコードを取得したり、ルーターを再起動して割り当てたりすることができることです。新しい 1 コードの IP、一部のルーターには動的 IP が付属しているため、2 番目の問題は、何千人ものユーザーがこのような数の setTimeouts で毎日または毎時間 Web サイトにアクセスすることを考慮すると、割り当てられたメモリ量でサーバーが過負荷になることです。 setTimeouts のみの場合。 setTimeouts がどのように機能するかを読みました。指定された時間に実行するために JavaScript コンパイラーにスペースを割り当てるため、ヒープまたはメモリが間違いなく過負荷になります。24 時間が経過したかどうかを判断するより良い方法はありますか? setTimeout() を使用しないのですか?

同じ問題を見つけようとしましたが、この問題に対する解決策が見つかりませんでした。データベースを使用してこの問題を解決しようと考えましたが、データベース全体をループして現在時刻が正しいかどうかを確認する必要があるため、別の問題が発生しました。ドキュメントの作成時間は数時間長く、このようなループは完了するまでに数日かかるか、API がダウンすると失敗します (コンテンツを更新するために定期的に再起動しています)

setTimeouts を使用してもサーバーが壊れず、何らかの理由で API がダウンしても失敗せず、オプションでユーザーが IP アドレスをスプーフィングしているかどうかを判断できるソリューションを見つけようとしています。

P粉811349112P粉811349112448日前588

全員に返信(1)返信します

  • P粉356361722

    P粉3563617222023-09-11 10:24:42

    問題を解決するには、サーバー側のストレージとタイムスタンプを組み合わせて使用​​します。考えられるアプローチの 1 つを次に示します:

    1. 新しいコードが生成されたら、タイムスタンプとともにデータベースまたは Redis などの永続ストレージ ソリューションに保存します。

    2. ユーザーが Web サイトにアクセスすると、最後に生成されたコードとそのタイムスタンプがストレージから取得されます。

    3. 現在のタイムスタンプと保存されているタイムスタンプを比較して、最後のコード生成から 24 時間が経過したかどうかを判断します。 JavaScript で Date オブジェクトを使用してタイムスタンプを処理できます。

    4. 24 時間以上経過すると、新しいコードが生成され、データベースに保存されているコードとタイムスタンプが更新されます。

    このアプローチを使用すると、多くの setTimeout 呼び出しが回避され、ユーザーごとにデータベース全体をループする必要もなくなります。代わりに、各ユーザーの訪問のタイムスタンプを単純に比較するだけです。

    ユーザーの IP スプーフィングの問題に関しては、ユーザーはさまざまな手法を使用して IP アドレスを変更できるため、IP スプーフィングを完全に防ぐことは困難です。ただし、追加のセキュリティ対策を実装して、IP スプーフィングの影響を最小限に抑えることができます。

    1. ユーザー認証の実装: Web サイトにアクセスするには、ユーザーにアカウントの作成とログインを要求します。こうすることで、IP を変更した場合でも、新しいコードを生成するには有効な認証情報が必要になります。

    2. レート制限を実装する: 特定の時間枠内でのユーザーごとのコード生成リクエストの数を制限します。これは、悪用を防止し、IP スプーフィングの影響を軽減するのに役立ちます。

    3. 不審なアクティビティを監視する: IP スプーフィングの試みを示す可能性のある異常なパターンや動作を検出するためのログ記録および監視メカニズムを実装します。不審なアクティビティが検出されたときに通知するアラートまたはトリガーを設定できます。

    これらの対策は IP スプーフィングの可能性を完全に排除することはできませんが、ユーザーによるシステムの悪用をより困難にし、そのような試みの影響を軽減することができます。

    返事
    0
  • キャンセル返事