>  Q&A  >  본문

수천 개의 setTimeouts를 사용하면 어떻게 되나요?

node.js를 통해 서버 측에 웹사이트가 있습니다. 페이지를 새로 고칠 때마다 새 코드가 생성됩니다. 마지막 코드 생성 이후 24시간이 지났는지 감지하고 싶습니다. 문제는 제가 그렇게 해야 한다는 것입니다. 24 시간이 지났는지 알아내야 합니다. 사용자의 IP에 setTimeout()을 사용하면 두 가지 문제가 발생합니다. 첫 번째는 IP를 쉽게 변경하고 새 코드를 얻거나 라우터를 다시 시작하고 새 코드를 할당할 수도 있다는 것입니다. code ip, 일부 라우터에는 동적 IP가 제공되므로 두 번째 문제는 수천 명의 사용자가 매일 또는 심지어 매 시간마다 이러한 setTimeouts 수로 웹 사이트에 액세스한다는 점을 고려하면 서버에 할당된 메모리 양으로 인해 과부하가 발생한다는 것입니다. setTimeouts만 가능합니다. setTimeouts가 어떻게 작동하는지 읽었습니다. 지정된 시간에 실행되도록 JavaScript 컴파일러에 일부 공간을 할당하므로 내 힙이나 메모리가 이로 인해 확실히 과부하될 것입니다. 24시간이 경과했는지 또는 중단했는지 확인하는 더 좋은 방법이 있습니까? setTimeout()을 사용하지 않습니까?

같은 문제를 찾아보려 했지만 이 문제에 대한 해결책을 찾을 수 없었습니다. 이 문제를 해결하기 위해 데이터베이스를 사용하려고 생각했지만 현재 시간이 맞는지 확인하기 위해 전체 데이터베이스를 반복해야 하기 때문에 또 다른 문제가 발생합니다. 24 문서가 생성되었을 때보다 몇 시간 더 높으며 이러한 루프는 완료하는 데 며칠이 걸리고 API가 다운되면 실패합니다(업데이트하기 위해 정기적으로 다시 시작합니다)

저는 setTimeouts를 사용하여 서버를 손상시키지 않고 어떤 이유로든 API가 다운되더라도 실패하지 않으며 사용자가 ip를 스푸핑하고 있는지 확인할 수 있는 옵션을 갖는 솔루션을 찾으려고 노력하고 있습니다

P粉811349112P粉811349112405일 전560

모든 응답(1)나는 대답할 것이다

  • P粉356361722

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

    문제를 해결하려면 서버측 저장소와 타임스탬프를 조합하여 사용할 수 있습니다. 가능한 접근 방식은 다음과 같습니다.

    1. 새 코드를 생성할 때 데이터베이스나 Redis와 같은 영구 스토리지 솔루션에 타임스탬프와 함께 저장하세요.

    2. 사용자가 웹사이트를 방문하면 저장소에서 마지막으로 생성된 코드와 타임스탬프를 검색합니다.

    3. 현재 타임스탬프를 저장된 타임스탬프와 비교하여 마지막 코드 생성 이후 24시간이 지났는지 확인합니다. JavaScript의 Date 객체를 사용하여 타임스탬프를 처리할 수 있습니다.

    4. 24시간 이상이 지난 경우 새 코드를 생성하고 데이터베이스에 저장된 코드와 타임스탬프를 업데이트하세요.

    이 접근 방식을 사용하면 많은 setTimeout 호출을 피할 수 있으며 각 사용자에 대해 전체 데이터베이스를 반복할 필요도 없습니다. 대신 각 사용자 방문의 타임스탬프를 간단히 비교하면 됩니다.

    사용자의 IP 스푸핑 문제와 관련하여 사용자는 다양한 기술을 사용하여 IP 주소를 변경할 수 있으므로 IP 스푸핑을 완전히 방지하는 것은 어렵습니다. 그러나 IP 스푸핑의 영향을 최소화하기 위해 추가 보안 조치를 구현할 수 있습니다.

    1. 사용자 인증 구현: 사용자가 웹사이트에 액세스하려면 계정을 만들고 로그인해야 합니다. 이렇게 하면 IP를 변경하더라도 새 코드를 생성하려면 유효한 자격 증명이 필요합니다.

    2. 속도 제한 구현: 특정 시간 내에 사용자당 코드 생성 요청 수를 제한합니다. 이는 남용을 방지하고 IP 스푸핑의 영향을 줄이는 데 도움이 됩니다.

    3. 의심스러운 활동 모니터링: IP 스푸핑 시도를 나타낼 수 있는 비정상적인 패턴이나 동작을 감지하는 로깅 및 모니터링 메커니즘을 구현합니다. 의심스러운 활동이 감지되면 알림을 보내도록 경고 또는 트리거를 설정할 수 있습니다.

    이러한 조치로 IP 스푸핑 가능성을 완전히 제거할 수는 없지만 사용자가 시스템을 남용하는 것을 더 어렵게 만들고 그러한 시도의 영향을 줄일 수 있습니다.

    회신하다
    0
  • 취소회신하다