【问题标题】:What does addListener do in node.js?addListener 在 node.js 中做了什么?
【发布时间】:2011-02-13 18:43:13
【问题描述】:

我试图了解 node.js 中 addListener 的用途。有人可以解释一下吗?一个简单的例子是:

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");

【问题讨论】:

    标签: javascript node.js listener dom-events


    【解决方案1】:

    它为“事件”注册一个监听器。事件由字符串标识,例如"connect""data"。第二个参数是一个函数,即所谓的“回调”,也称为“事件处理程序”。每当在侦听器注册到的对象中发生特定事件时,都会调用所有处理程序。

    node.js 使用这个,因为它采用异步执行模型,最好用事件驱动的方法来处理。

    问候
    back2dos

    【讨论】:

    • 我了解回调\异步部分。就像发布者/订阅者一样,事件被触发,事件订阅者(回调)然后异步执行(以非阻塞方式)。但我就是无法理解触发位。说“连接”是如何被谁触发的?
    【解决方案2】:

    由于 Node.js 工作是事件驱动并执行事件循环,注册侦听器允许您定义将在每次触发事件时执行的回调。因此,它也是异步的一种形式。代码结构。

    它类似于 GUI 侦听器,在用户交互时触发。就像鼠标单击触发 GUI 应用程序中的代码执行一样,您的示例中的侦听器将在事件发生时立即运行,即新客户端连接到套接字。

    【讨论】:

    • 好的,所以“连接”、“数据”或“结束”将是事件的名称。但是,这些事件名称在哪里以及由谁定义?
    • 这取决于事件发射的来源。因此存在类EventEmitter。对于 EventEmitters 的可用对象,例如您的(服务器)套接字,请查看文档以找到事件名称。
    • @Jeffrey:事件名称由实现分派事件的类的任何人定义。他们是完全任意的。在服务器代码的某个地方,你会发现诸如“fireEvent”、“triggerEvent”或“dispatchEvent”之类的东西,不管它叫什么。
    • 我认为维基百科的文章很好地涵盖了事件循环:en.wikipedia.org/wiki/Event_loop
    • @Jeffrey:你可能会觉得这很有帮助:en.wikipedia.org/wiki/Event_loop ...虽然解释比它需要的复杂一点:)
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2019-06-30
    • 2014-08-03
    • 2012-02-12
    • 2010-10-26
    • 2019-07-12
    • 2010-11-20
    • 2011-07-24
    相关资源
    最近更新 更多