nodejs

2016-03-29 33 views
-1

Bir seferde bir istek tarafından bir değişken tarafından artırılan bir değişken tutmak nasıl 10 sn içinde istek sayısını sayacak bir kod yazıyorum ve o sadece 1 4 istekleri izin verecektir. Bu her 10 saniyede bir tekrar eder. Örnek kodum ekte. Sorunum, birden çok istek farklı makinelerde aynı anda geliyor olsa da farklı davranıyor. Muhtemelen nedeni, değişkeni senkronize etmedim. Lütfen bunu nasıl yapacağınıza cevap verin. Oldukça genel yüzdennodejs

var http = require("http"); 
var Repeat = require("repeat"); 
var fs= require("fs"); 
var express=require('express'); 
var a=0;        /* This is the variable */ 
function send404PageNotFound(response){ 
    console.log("in 404"); 
    response.writeHead(404,{'content-type': 'text/plain'}); 
    response.write("$04 Page not Found"); 
    response.end(); 
} 

function onRequest(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'});  
    console.log('A request is coming from'); 
    console.log(request.connection.remoteAddress); 
    a=a+1; 
    console.log(a); 
    if(a<5) 
    { 
     if(request.method== 'GET' && request.url=='/'){ 
      response.writeHead(200,{'Content-Type': 'text/html'}); 
      fs.createReadStream("./index.html").pipe(response); 
     } 
     else{ 
      send404PageNotFound(response); 
     } 
    } 
    else 
    { 
     response.end('Server is busy\n'); 
    } 

} 
setInterval(function(){ a=0; },10000); 
http.createServer(onRequest).listen(8081); 
+0

üzerine de, go "o farklı davranır" tanısal olarak işe yaramaz. Lütfen tam olarak nasıl davrandığını ve beklediğinizden nasıl farklı olduğunu açıklayın. "değişkeni senkronize etmedim" - JS tek iş parçacıklı, senkronizasyon kavramı geçerli değil. – Amadan

cevap

0

Bu kısma sorundur.

Belirli bir durumu kullanarak soruyorsunuz, ancak iyi bir yanıt diğer insanlara da yardımcı olabilir.

İhtiyacınız olan şey, son başarılı isteğin zamanını tutmaktır.

sayaç üstünden ise:

onay son kabul edilen isteği zaman 10'dan fazla saniye önce olsaydı. böylece, sayacı sıfırlamak (ve isteği kabul) ise othwerwise Bunu sizin için çalışan almak için function onRequest(request, response) {

ile document.addEventListener('click', function(ev){ değiştirmeniz gerekiyor isteği

reddediyoruz. İşte

sen codepen Throttle clicks demo

var count=0 
var lastReq 

document.addEventListener('click', function(ev){ 
    count++; 

    if(count>4){ 
    var now = new Date().getTime() 
    if(now-lastReq >=10000){ 
     console.log('reset: now accepting') 
     //reset 
     count=0; 
    }else{ 
     console.log('rejecting') 
    } 
    } 
    if(count<=4) 
    { 
    lastReq = new Date().getTime() 
    console.log('accepting') 
    //accept 
    } 
    console.log(count, lastReq); 
})