2013-08-20 6 views
5

Mein Quellcode:Zählen Besucher in einem Knoten HTTP-Server

var http = require("http"); 
var count=1; 

http.createServer(function(request, response) { 
response.writeHead(200, {"Content-Type": "text/plain"});  
response.write("Hi, you are number "+count+" visitors"); 
response.end(); 
count++; 
    }).listen(8888); 

Ich habe 1,3,5,7, ..... in jedem Besuch. Warum die Anzahl um 2 erhöhen?

Antwort

8

Die Anfrage an favicon.ico löst eine zusätzliche Anfrage aus (ich habe dies bestätigt, indem ich die Details für jede Anfrage protokolliert habe und dann eine normale Anfrage mit Chrome gemacht habe).

Sie müssen explizit nach dem Typ der Anfrage (URL, Methode usw.) suchen, die Sie abgleichen möchten.

Denken Sie auch daran, wenn Ihr Server stirbt, was wahrscheinlich irgendwann passiert, wird Ihre Zählung zurückgesetzt. Wenn Sie das nicht möchten, sollten Sie es irgendwo weniger flüchtig wie eine Datenbank beibehalten.

+0

Die Art der Anfrage? Ich verwende einfach localhost: 8888 in einem Browser. Wenn ich den Server zurücksetze, fängt es wieder bei 1,3,5, ... an. – user1780176

+0

@ user1780176 Ich meine, untersuchen Sie die Informationen der Anfrage, z. B. die URL. Ich meinte nicht den Typ wie in 'GET',' POST', etc. – alex

+0

Mein Verständnis ist, dass das Ereignis ausgelöst wird und dann der Befehl ausgeführt wird. Die Ereignisschleife wird nur einmal ausgeführt. Recht? – user1780176

0

Wenn Ihr Server nur ein einfacher Zähler ist und Sie wissen, dass die Anforderung an favicon.ico eine zusätzliche Anforderung auslöst, können Sie jede Anfrage einfach zur Hälfte zählen, sodass die Anzahl der Besuche genau ist.

counter = counter + 0.5; 
+4

Das ist ziemlich zerbrechlich, man kann nicht garantieren, dass jede Anfrage versuchen wird, auch 'favicon.ico' zu greifen. – alex

0

Sie können den Antrag auf favicon.ico ignorieren:

var server = http.createServer(function (req, res) { 
    if(req.url === '/favicon.ico'){ 
     console.log('favicon'); 
     return; 
    } 
    userCount++; 
    res.writeHead(200, { 'Content-Type': 'text/plain' }); 
    res.write('Hello!\n'); 
    res.write('We have had ' + userCount + ' visits!\n'); 
    res.end(); 

}); 
Verwandte Themen