2010-04-29 74 views
9

我想了解addListener在node.js中的用途。有人可以解釋嗎?謝謝!一個簡單的例子是:addListener在node.js中做什麼?

var tcp = require('tcp'); 
var server = tcp.createServer(function (socket) { 
    socket.setEncoding("utf8"); 
    socket.addListener("connect", function() { 
    socket.write("hello\r\n"); 
    }); 
    socket.addListener("data", function (data) { 
    socket.write(data); 
    }); 
    socket.addListener("end", function() { 
    socket.write("goodbye\r\n"); 
    socket.end(); 
    }); 
}); 
server.listen(7000, "localhost"); 

回答

8

由於該工程的Node.js事件驅動並執行事件循環,註冊監聽器允許您定義將要在每次事件被觸發時執行回調的事實。因此,它也是一種異步形式。代碼結構。

它與GUI偵聽器相媲美,觸發用戶交互。就像點擊鼠標一樣,觸發GUI應用程序中的代碼執行,您的示例中的偵聽器將在事件發生時立即運行,即新客戶端連接到套接字。

+0

確定,所以「連接」,「數據」或「結束」。將事件的名稱。但是在哪裏和誰定義這些事件名稱? – Jeff 2010-04-29 11:40:22

+0

「事件循環」究竟是什麼? – Jeff 2010-04-29 11:40:47

+1

這取決於事件發射的來源。因此存在類EventEmitter。對於可用的EventEmitter對象,如您的(服務器)套接字,請查看文檔以查找事件名稱。 – 2010-04-29 11:42:30

1

它註冊一個「事件」的偵聽器。事件由字符串標識,如"connect""data"。第二個參數是一個函數,所謂的「回調」,也被稱爲「事件處理程序」。只要在監聽器註冊到的對象內發生特定事件,就會調用所有處理器。

node.js使用這個,因爲它使用了一個異步執行模型,可以最好的使用事件驅動的方法來處理。

格爾茨
back2dos

+0

我明白回調\異步部分。它就像發佈者/訂閱者一樣觸發一個事件,然後事件訂閱者(回調函數)以非阻塞方式異步執行。但我無法擺脫觸發位。如何說「連接」被誰引發? – Jeff 2010-04-29 12:42:01

+0

我想我需要閱讀EventEmitter部分。 – Jeff 2010-04-29 12:44:59