Tag: 事件

什么时候在Node js中使用eventEmitter?

我在节点js学习新的概念是事件,但我无法find我应该使用这个,我想任何真正的情况下,我找不到任何文章或博客。 var events = require('events'); var eventEmitter = new events.EventEmitter(); //Create an event handler: var myEventHandler = function () { console.log('I hear a scream!'); } //Assign the event handler to an event: eventEmitter.on('scream', myEventHandler); eventEmitter.on('test', function(){ console.log("Testing event"); }); //Fire the 'scream' event: eventEmitter.emit('scream'); eventEmitter.emit('scream'); eventEmitter.emit('test'); 我可以通过简单的调用函数myEvenHandler()来实现同样的事情?

Node.js代码问题

我是node.js的新手 我正在尝试的代码中有几个问题。 看看代码: var http =require('http'); var url = require('url'); var events=require('events'); var e=new events.EventEmitter(); var i=0; var clientlist=new Array(); function user(nam,channel) { this.nam = nam; this.chan=channel; } server = http.createServer(function(req,res) { res.writeHead(200,{'Content-Type':'text/html'}); res.write('welcome'); var pathname = url.parse(req.url).pathname; pathname=pathname.substring(1); pathnames=pathname.split("&"); var c=new user(pathnames[0],pathnames[1]); clientlist[i++]=c; console.log("user "+pathnames[0]+" joined channel "+pathnames[1]); e.emit('userjoined',clientlist[i-1].nam,clientlist[i-1].chan); e.on('userjoined',function(n,c) { res.write("new user joined […]

如何模仿一个irc服务器断开连接来testing我的nodejs irc bot?

我正在使用net.Socket模块连接到EFNET并testing我的代码,以便将重新连接事件添加到我的机器人。 有什么方法可以模拟机器人断开连接? 这个问题是非常2-3个星期的问题 – 我已经添加了事件处理程序,以便了解从IRC断开时会发生什么: irc = { info:{} , listeners : [] , socket : new net.Socket() } irc.socket.on('timeout', function() { console.log('timeout'); }); irc.socket.on('error', function() { console.log('error'); }); irc.socket.on('end', function() { console.log('end??') setTimeout(function() { //irc.socket.connect(config.server.port, config.server.addr); }, 1000 ); }); 或者,如果有人知道哪些实际事件通常与irc机器人有关,我会感激。 编辑#1:也许我可以做一些iptables和过滤端口,而它正在运行或沿着这些线?

如何用超时和监听器创build未来

我正在试图创造一个有未来的function。 在这个函数中,它将等待一个End或Error事件。 如果没有数据写入x秒,将返回一个错误。 这是我写的。 Cylon.execute = function (subroutine, timeout=60000) { let future = new Future(); let done = future.resolver(); let timeoutId = Meteor.setTimeout(function () { done(new Meteor.Error('CylonTimeout')); }); this._messages.on('data', () => { timeoutId = Meteor.setTimeout(function () { done(new Meteor.Error('CylonTimeout')); }); }); this.on('End', () => { Meteor.clearTimeout(timeoutId); done(null, subroutine); }) this.on('Error', (err) => { Meteor.clearTimeout(timeoutId) done(err, […]

node.js事件发射器绑定到多个实例

如果我有一个监听事件发射器的类,那么绑定每个实例是否是错误的做法? function MyClass() { emitter.on('ready', function() { // do something }); } myclass = new MyClass(); 如果我多次调用emitter.on(),它会发出警告。 (节点)警告:检测到可能的EventEmitter内存泄漏。 添加了11位听众。 使用emitter.setMaxListeners()来增加限制。 事件发射器意味着每个模块只绑定一次,而不是类实例? 如果这是错误的,那么当事件触发时,如何访问类实例? 谢谢

如何在node.js中创build可中断的循环

免责声明:我是一个Node.js新手,下面的描述可能会很长… 我目前正试图教自己的Node.js一个小项目,我后。 项目的想法如下:RaspberryPI运行一个Node.js应用程序,它允许我控制RGB LED灯条的颜色。 应用程序应该能够设置一个静态颜色,也可以运行颜色平滑的颜色轮。 我的想法是现在创build几个Node.js脚本: 执行客户端通信的“控制器”,设置静态颜色或能够启动色轮 “客户端脚本”,每个运行一个色轮。 他们中至多有一个是“活着的”,由“控制者”启动/停止, 我已经能够创build一个脚本来分叉另一个脚本,并能够使用child.send来停止脚本,如下所示: controller.js var fork = require('child_process').fork, test2 = fork(__dirname + '/test2.js'); setTimeout(function() { test2.send({func: 'quit'}); }, 5000); 这分叉了test2.js脚本,并在5秒钟之后发送退出test2.js的quit消息。 test2.js function runLoop() { console.log("Hello"); setTimeout(runLoop, 1000); } process.on('message', function(m) { if (m.func === 'quit') { process.exit(0); } }); setTimeout(runLoop, 1000); 这个“客户端脚本”每秒打印“Hello”,直到控制器发送quit消息。 这工作得很好 – 5秒钟后脚本完成优雅。 我的问题是现在:如果我实现了一个色轮,我需要一个可能无限循环,改变LED灯带的颜色。 上面的(当然更短的定时器值 – […]

socket.io – 捕获所有事件

我正在开发一个Node.js应用程序,几乎所有的通信都是通过sockets.io进行的。 我需要做的是,在处理任何请求(除login请求之外)之前,请确保用户已通过身份validation。 这样做的显而易见的方法是在执行任何方法之前调用一个全部的监听器。 不过,我似乎无法在Socket.io中find类似的东西。 我怎样才能达到? 有没有比我正在采取的更好的方法?

在所有当前计划的callback被执行之后调用一个函数(节点)

我正在使用stream式multipart/form-dataparsing器来处理文件和字段上传。 每当一个新的字段或文件被parsing,一个事件被触发,我执行一些处理。 在所有的字段和文件被parsing后,一个'close'事件被触发,然后我调用请求的终止函数。 这是设置。 parser.on('fields',function(){ handleField(callback); }); parser.on('close',function(){ dismiss(); }) 问题是,处理一个字段可能需要一些时间,这使得'close'侦听器在我有机会从字段处理侦听器调用callback之前closures请求。 我试图使用根据其描述的setImmediate函数 在I / O和定时器callback之后将其callback排队在事件队列中。 为了让我的dismiss()函数在所有当前计划的callback被执行之后被调用,但是没有工作,我甚至尝试了process.nextTick()以防止我的顺序颠倒,但没有这样的运气。 所以问题是,只有在调用处理函数的所有当前计划的callback之后,我怎样才能调用我的dismiss()函数呢?

使用Node.js来监听Redis上的重要事件

我需要知道在Redis商店的特定密钥上写入数据的时间。 有没有办法使用Node.js来监听Redis关键事件,还是必须使用pub / sub实用程序? 在第二种情况下,最好的办法是什么?

用__proto__混合EventEmitter方法

给定一个任意的对象,我想使它成为一个EventEmitter: var obj = {} // mixin eventemitter obj.on('event', …) obj.emit('event') 另外,当我键入obj时,我不希望它显示EventEmitter方法作为方法。 例如通过CLI: > obj {} 因此,现在我正在做: function mixinEventEmitter(obj) { obj.__proto__ = EventEmitter.prototype return obj } 但是人们说使用__proto__是一个反模式: Node.js – 从EventEmitterinheritance 我做得对吗? 你有更好的方式来做到这一点? 谢谢。