From 86304976881d859d118d78258c59e78d11d423b9 Mon Sep 17 00:00:00 2001 From: Astro Date: Fri, 22 Apr 2011 17:40:39 +0200 Subject: [PATCH] nedap server: rate limiting --- TODO | 6 +++--- nedap/server.js | 12 +++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/TODO b/TODO index 99ddd6b..5a59e59 100644 --- a/TODO +++ b/TODO @@ -23,11 +23,11 @@ * a8 -(0%)- irc-Web gateway (asto finded das blöd. Aber vllt. hat jemand keinen irc-Client zur Hand * astro -(0%)- Google-Joker: ggf. anderer Name; Spieler darf für 30s bei Google suchen und im Web klicken. Dafür gibt es ein unbeschriftetes Keyboard mit engl. oder dt. Tastaturlayout -* astro -(10%)- Pusher-Joker: Spieler gibt die Frage an einen anderen Spieler weiter +* astro -(100%)- Shift-Joker: Spieler gibt die Frage an einen anderen Spieler weiter * astro -(100%)- Wikipedia-Joker: 2 Antworten werden wegen Irrelevanz gelöscht (Logo!) * astro -(100%)- vote.c3d2.de & IRC auf Startscreen -* astro -( 0%)- nedap-joker rate limiting -* astro -( 70%)- nedap-joker vote w/ token +* astro -( 99%)- nedap-joker rate limiting +* astro -(100%)- nedap-joker vote w/ token == Ideen == * - -()- Eliza-Joker: Frage kann wie bei Eliza per Text-Chat erörtert werden. Da ist aber der Aufwand für diff --git a/nedap/server.js b/nedap/server.js index 5d0612d..3bbbc78 100644 --- a/nedap/server.js +++ b/nedap/server.js @@ -39,6 +39,16 @@ var Token = { } }; +var updateBackendTimeout; +function updateBackend() { + if (!updateBackendTimeout) { + updateBackendTimeout = setTimeout(function() { + backend.send(JSON.stringify({ scores: scores })); + updateBackendTimeout = undefined; + }, 50); + } +} + function nedap(app) { app.get('/', function(req, res) { if (question && answers) { @@ -80,7 +90,7 @@ console.log({question:question,answers:answers}) var i = parseInt(a, 10); if (scores && i < scores.length && Token.validate(req.body.token)) { scores[i]++; - backend.send(JSON.stringify({ scores: scores })); + updateBackend(); res.writeHead(303, { 'Content-type': 'text/html', 'Location': '/thanks' });