2013-10-13 72 views
4

我有這個簡單的TCP服務器:什麼時候在nodejs網絡模塊發出'connect'事件?

var net = require('net'); 

var server = net.createServer(function (socket) { 

    socket.on('connect', function() { 
     console.log("New client!"); 
    }); 

}); 

server.listen(8000, function(){ 
    console.log("server running...") 
}); 

,然後我有另一個文件client.js

var net = require('net'); 

var client = net.connect({port: 8000}, 
    function() { 
    console.log('client connected'); 
}); 

client.on('error', console.error); 

我運行一個終端窗口,然後服務器我在別的客戶端運行窗口,並期望看到服務器日誌「新客戶端」。雖然,那沒有發生。那麼,什麼時候「連接」事件準確發射?

回答

16

net.createServer將給定函數設置爲connection event的偵聽器。

換句話說,在服務器端,當您收到回調時,套接字已連接,並且您嘗試收聽的事件未在已連接的套接字上發出。

+0

那麼,這是否意味着我提供給'net.createServer'的回調本質上是在'connect'事件上執行的? 另外,我怎麼能明確地發出連接事件,然後因爲它不能在已經連接的套接字上發射? – Jatin

+3

@Jatin是的,回調會自動在'connected'事件中註冊。要手動發出'connect'事件,可以使用[emitter.emit()](http://nodejs.org/api/events.html#events_emitter_emit_event_arg1_arg2)。 –

0

我做了一個不同的測試。服務器對象具有「超時」屬性。當您撥打以下代碼時:

server.setTimeout(500); //現在在0.5秒後您可以調用「連接」事件。 默認值是120000.

但是,我仍然不知道這個更改會導致什麼。

相關問題