ソースを参照

setInterval to clean up ips

Michelle Bu 12 年 前
コミット
c1b8196744
1 ファイル変更25 行追加10 行削除
  1. 25 10
      lib/server.js

+ 25 - 10
lib/server.js

@@ -5,8 +5,6 @@ var EventEmitter = require('events').EventEmitter;
 var WebSocketServer = require('ws').Server;
 var url = require('url');
 
-
-
 function PeerServer(options) {
   if (!(this instanceof PeerServer)) return new PeerServer(options);
   EventEmitter.call(this);
@@ -40,9 +38,11 @@ function PeerServer(options) {
   
   // Mark concurrent users per ip
   this._ips = {};
+
+  this._setCleanupIntervals();
   
   var self = this;
-  setInterval(function(){
+  setInterval(function() {
     self._pruneOutstanding();
   }, 5000);
 };
@@ -76,7 +76,7 @@ PeerServer.prototype._initializeWSS = function() {
         if (!err) {
           if (!self._clients[key][id]) {
             self._clients[key][id] = { token: token, ip: ip };
-            self._ips[ip]++;            
+            self._ips[ip]++;
             socket.send(JSON.stringify({ type: 'OPEN' }));
           }
           self._configureWS(socket, key, id, token);
@@ -225,7 +225,7 @@ PeerServer.prototype._initializeHTTP = function() {
   });
 
     
-  var handle = function(req, res){
+  var handle = function(req, res) {
     var key = req.params.key;
     var id = req.params.id;
     var client = self._clients[key][id];
@@ -279,7 +279,7 @@ PeerServer.prototype._startStreaming = function(res, key, id, token, open) {
   
   if (token === client.token) {
     // Client already exists
-    res.on('close', function(){
+    res.on('close', function() {
       if (client.res === res) {
         if (!client.socket) {
           // No new request yet, peer dead
@@ -299,13 +299,13 @@ PeerServer.prototype._startStreaming = function(res, key, id, token, open) {
 
 PeerServer.prototype._pruneOutstanding = function() {
   var keys = Object.keys(this._outstanding);
-  for (var k = 0, kk = keys.length; k < kk; k++) {
+  for (var k = 0, kk = keys.length; k < kk; k += 1) {
     var key = keys[k];
     var dsts = Object.keys(this._outstanding[key]);  
-    for (var i = 0, ii = dsts.length; i < ii; i++) {
+    for (var i = 0, ii = dsts.length; i < ii; i += 1) {
       var offers = this._outstanding[key][dsts[i]];
       var seen = {};
-      for (var j = 0, jj = offers.length; j < jj; j++) {
+      for (var j = 0, jj = offers.length; j < jj; j += 1) {
         var message = offers[j];
         if (!seen[message.src]) {
           this._handleTransmission(key, { type: 'EXPIRE', src: message.dst, dst: message.src });
@@ -315,7 +315,22 @@ PeerServer.prototype._pruneOutstanding = function() {
     }
     this._outstanding[key] = {};
   }
-}
+};
+
+/** Cleanup every 10 mins. */
+PeerServer.prototype._setCleanupIntervals = function() {
+  var self = this;
+  setInterval(function() {
+    // Cleanup ips.
+    var keys = Object.keys(self._ips);
+    for (var i = 0, ii = keys.length; i < ii; i += 1) {
+      var key = keys[i];
+      if (self._ips[key] == 0) {
+        delete self._ips[key];
+      }
+    }
+  }, 600000);
+};
 
 /** Process outstanding peer offers. */
 PeerServer.prototype._processOutstanding = function(key, id) {