노드 서버 스로틀 링에 대한 반복적 인 AJAX 요청 (Express / jQuery)

absay

저는 Node.js를 처음 접했고 그것이 어떻게 작동하는지보기 위해 일반적인 멍청한 일을하고 있습니다.

jQuery를 사용하여 로컬 노드 서버에 대한 간단한 AJAX GET 요청을 수행하는 버튼이있는 클라이언트 웹 페이지가 있습니다 (데이터는 관련이 없음). 여기서는 app.get()모든 요청의 카운터 값이 콘솔에 기록됩니다. 성공한 요청 수를 확인할 수 있습니다.

버튼을 클릭하면, 예를 들어 1 초에 한 번씩 콘솔에 예상대로 카운터가 표시됩니다. 그러나 반복적으로 클릭하면 (초당 4 ~ 5 번) 서버는 훨씬 나중에 콘솔에 카운터를 기록하고 표시합니다. 일반적으로 클릭 수에 따라 몇 분 정도 걸립니다. 요청을 조절하고 있습니다.

실제 프로덕션 측면에서 내가 만들려고하는 실제 앱이 AJAX 요청을 이와 같이 "남용"할 가능성은 거의 없지만 이것이 문제가되지 않을 것이라고 예상했고 분명히 남용하지 않는 사용자에게 의존 할 수 없습니다. 버튼.

문제를 재현 할 수있는 MWE가 있습니다.

server.js

const express = require('express');
const MongoClient = require('mongodb').MongoClient
//const bodyParser= require('body-parser');
const app = express();
//app.use(bodyParser.urlencoded({extended: true}));
//app.use(express.static(__dirname + '/public'));

app.set('view engine', 'ejs');

var db;
var clientURL  = 'mongodb://127.0.0.1:27017/mydatabase'
var clientPort = 3000

MongoClient.connect(clientURL, (err, database) => {
  if (err) return console.log(err)
  db = database
  app.listen(clientPort, () => {
    console.log('Listening on '+clientPort)
  })
})

app.get('/', (req, res) => {
  res.render('client.ejs')
  })
})

var c = 0; // counter
app.get('/mydatabase/endpoint', (req, res) => {
  c = c + 1
  console.log(c)
})

scripts.js

$(document).ready(function (){
    $(".button").on("click", function(){
        // AJAX GET
        $.ajax({
            url: "mydatabase/endpoint",
            type: "get",
            data: "..." // not imporant
        })
    });
})

클라이언트는 클래스 button가있는 요소 가있는 간단한 HTML 페이지입니다 .button.

PC 사양 : Windows 7 Professional 32 비트, Intel Core 2 Quad CPU Q6600 2.40GHz, 4GB RAM (정말 오래된 시스템, 알고 있습니다).

질문은 왜 요청이 그렇게 제한됩니까? a) 내 컴퓨터, b) 잘못된 논리 접근 방식 또는 c) Express 또는 Node.js와 관련이 있습니까? 나는 이것이 Apache / PHP에서 일어나는 일을 기억하지 못한다.

jfriend00

여기서 진행되는 것은 특정 수량을 초과하면 브라우저가 요청을 대기열에 넣는 것입니다. 브라우저는 특정 도메인에 대한 동시 요청 수를 제한하고이를 초과하면 이전 요청이 반환 될 때까지 요청을 대기열에 넣습니다.

그리고 app.get()카운터가있는 사용자 가 응답을 반환하지 않기 때문에 브라우저는 브라우저가 수행 한 처음 N 개의 요청이 완료 될 때까지 기다리지 않습니다. 결국 (몇 분 후) 시간이 초과되고 더 많은 요청을 보낼 수 있습니다.

나는 그것이하는 모든 일이 값을 기록하는 것이라면 이것이 서버의 문제라고 의심합니다.

응답을 보내면이 문제가 사라질 수 있습니다.

var c = 0; // counter
app.get('/mydatabase/endpoint', (req, res) => {
  ++c;
  console.log(c);
  res.send("" + c);
});

Express에서 핸들러를 정의한 모든 경로는 실제로 반환 할 항목이 없더라도 일종의 응답을 보내야합니다. 그렇지 않으면 발신자는 응답이 일어나기를 기다리며 일을 막을 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

서버에 대한 jquery / ajax 요청 및 선택한 레코드 표시

분류에서Dev

Nginx의 정적 HTML 리소스에 대한 Jquery Ajax 요청으로 인해 "405 Not Allowed"가 발생합니다.

분류에서Dev

노드에 대한 사용자 입력을 반복적으로 요청합니까?

분류에서Dev

jQuery 대화 버튼에서 ajax 요청이 여러 번 실행되는 원인

분류에서Dev

ajax 요청은 Express 서버 (크롬)가있는 404를 서버없이 Firefox에서 성공적으로로드합니까?

분류에서Dev

노드에 대한 모든 프로세서 요청

분류에서Dev

노드의 소켓 IO에 대한 cURL 요청 (Express)

분류에서Dev

jQuery / Rails로 변경 기능에 대한 AJAX 요청

분류에서Dev

Django-Celery-반복적 인 요청에 대해 병렬로 작업

분류에서Dev

나머지를 대기열에 넣어 내 노드 http 서버에 대한 인바운드 요청의 양을 제한하는 방법

분류에서Dev

한 노드에서 다른 노드로 xsl 요소 복사

분류에서Dev

AJAX에서 적절한 XHR 요청을 만드는 방법

분류에서Dev

JNI 메서드에 대한 반복적 인 호출로 인해 애플리케이션이 중단됨

분류에서Dev

AJAX에 의한 서버 요청 감소

분류에서Dev

Elasticsearch에서 인덱스에 대한 기본 및 복제본 노드 할당

분류에서Dev

elixir에서 노드 프로세스를 시작한 다음 http 요청의 결과를 반환합니다.

분류에서Dev

파일 다운로드에 대한 HTTP 요청이 JQuery Ajax 호출을 중지합니다.

분류에서Dev

Slurm에서 스큐에 대한 반복적 인 호출이 왜 눈살을 찌푸 리나요?

분류에서Dev

일반적인 대규모 가상 호스트 구성으로 인해 모든 가상 호스트 요청에서 404 상태 코드 발생

분류에서Dev

rxJava 및 Retrofit에 대한 반복 요청이있는 로그인 양식

분류에서Dev

setInterval을 통한 jQuery .ajax XHR 요청이 Raspberry PI Chromium에서 제대로 작동하지 않습니다.

분류에서Dev

로그인을위한 jQuery ajax POST 요청

분류에서Dev

Express 서버에 대한 반응의 Axios POST 요청이 404를 반환합니다.

분류에서Dev

지오 서버에 대한 ExtJs Ajax 요청

분류에서Dev

Android의 서버에서 이미지 다운로드에 대한 JSON POST 요청

분류에서Dev

SSL 서버에 대한 인증서 서명 요청 생성

분류에서Dev

스프링 보안 로그인에 ajax 요청 보내기

분류에서Dev

프런트 엔드 서버에 대한 GET 요청 및 JSON 개체 반환

분류에서Dev

오프라인 모드에서 로컬 리소스에 대한 http 요청 보내기

Related 관련 기사

  1. 1

    서버에 대한 jquery / ajax 요청 및 선택한 레코드 표시

  2. 2

    Nginx의 정적 HTML 리소스에 대한 Jquery Ajax 요청으로 인해 "405 Not Allowed"가 발생합니다.

  3. 3

    노드에 대한 사용자 입력을 반복적으로 요청합니까?

  4. 4

    jQuery 대화 버튼에서 ajax 요청이 여러 번 실행되는 원인

  5. 5

    ajax 요청은 Express 서버 (크롬)가있는 404를 서버없이 Firefox에서 성공적으로로드합니까?

  6. 6

    노드에 대한 모든 프로세서 요청

  7. 7

    노드의 소켓 IO에 대한 cURL 요청 (Express)

  8. 8

    jQuery / Rails로 변경 기능에 대한 AJAX 요청

  9. 9

    Django-Celery-반복적 인 요청에 대해 병렬로 작업

  10. 10

    나머지를 대기열에 넣어 내 노드 http 서버에 대한 인바운드 요청의 양을 제한하는 방법

  11. 11

    한 노드에서 다른 노드로 xsl 요소 복사

  12. 12

    AJAX에서 적절한 XHR 요청을 만드는 방법

  13. 13

    JNI 메서드에 대한 반복적 인 호출로 인해 애플리케이션이 중단됨

  14. 14

    AJAX에 의한 서버 요청 감소

  15. 15

    Elasticsearch에서 인덱스에 대한 기본 및 복제본 노드 할당

  16. 16

    elixir에서 노드 프로세스를 시작한 다음 http 요청의 결과를 반환합니다.

  17. 17

    파일 다운로드에 대한 HTTP 요청이 JQuery Ajax 호출을 중지합니다.

  18. 18

    Slurm에서 스큐에 대한 반복적 인 호출이 왜 눈살을 찌푸 리나요?

  19. 19

    일반적인 대규모 가상 호스트 구성으로 인해 모든 가상 호스트 요청에서 404 상태 코드 발생

  20. 20

    rxJava 및 Retrofit에 대한 반복 요청이있는 로그인 양식

  21. 21

    setInterval을 통한 jQuery .ajax XHR 요청이 Raspberry PI Chromium에서 제대로 작동하지 않습니다.

  22. 22

    로그인을위한 jQuery ajax POST 요청

  23. 23

    Express 서버에 대한 반응의 Axios POST 요청이 404를 반환합니다.

  24. 24

    지오 서버에 대한 ExtJs Ajax 요청

  25. 25

    Android의 서버에서 이미지 다운로드에 대한 JSON POST 요청

  26. 26

    SSL 서버에 대한 인증서 서명 요청 생성

  27. 27

    스프링 보안 로그인에 ajax 요청 보내기

  28. 28

    프런트 엔드 서버에 대한 GET 요청 및 JSON 개체 반환

  29. 29

    오프라인 모드에서 로컬 리소스에 대한 http 요청 보내기

뜨겁다태그

보관