2011-06-17 48 views
1

我有一個nowjs問題:nowjs - 拒絕客戶端連接

你如何拒絕連接事件的事件處理程序的客戶端連接?

我想在客戶端連接時檢查服務器上的某些值,然後決定是放棄連接還是讓他連接。

OK,既然計算器莫名其妙地認爲我的問題是,不知何故低於他們的質量標準,我會嘗試加入一個代碼示例...

everyone.on('connect', function(){ 
    if (!niceClient) { 
     // do something to kick him out 
    } 
}); 

在此先感謝!

+2

是,加入指示工作流中的代碼示例(或多於一個)和優選爲記錄代碼示例中,總是讓一個更好的問題。我鼓勵你甚至可以多加一點這個問題。 http://tinyurl.com/so-hints – jcolebrand

+0

是的,你是絕對正確的,但在這種情況下,代碼示例對我來說似乎顯得很荒謬。但我保證未來會更好,吸取教訓。 – DasAntonym

回答

2

我不知道nowjs的具體細節,但使用普通的node.js,你可以做這樣的事情:

var http = require('http') 
http.createServer(function (req, res) { 
    // ... 
}).on('connection', function(sock) { 
    if (!niceClient) { 
    sock.end(); // Close the client connection. 
    } 
}).listen(8080, 'localhost'); 

它看起來像nowjs只是包裝一個節點HTTP服務器,因此推測這種'連接「事件監聽器也將與該庫一起工作。

+0

這實際上可能是太低級別來驗證nowjs連接,因爲nowjs的東西來自套接字連接。但感謝提示,它給了我一些想法來進一步檢查這一點。 – DasAntonym

1

我現在發現訪問控制在nowjs中還沒有實現。這可能是後來增加的一個功能,但是現在還沒有太多的工作要比實施本土解決方案。

我現在將解決這一如下:

所有相關動作是通過一組完成的(例如,「niceusers」)和成功驗證之後,用戶放置這一組。如果沒有成功的驗證,他仍然處於「冷靜」狀態,並且沒有收到任何組織的溝通。

這解決了我的問題,但它可能不足以實現真正的訪問控制。

仍然希望這可能有助於某人!

2

嘗試這種

nowjs.on('connect', function(){ 
    nowjs.getClient(this.user.clientId, function(err){ 
     var address = this.socket.handshake.address; 
     //@todo test if ip is blocked or banned 
     console.log("New connection from " + address.address + ":" + address.port); 

     //bla bla bla .... 
      if (!niceClient) { 
       this.socket.end(); // Close the client connection. 
      }    
    }); 
});