Tag: 事件

调用事件发射器中的.emit()之前调用.on()是否存在计时问题?

取这个代码,其中f是一个具有事件“body”的stream,它使用m来调用监听器 – 这本身就是一个stream事件: f.on('message', function(m) { m.on('body', function(stream, info) { var b = ''; stream.on('data', function(d) { b += d; }); stream.on('end', function() { if (/^header/i.test(info.which)) msg.header = Imap.parseHeader(b); else msg.body = b; }); }); m.on('attributes', function(attrs) { msg.attrs = attrs; msg.contentType = partID[1]; }); }); f.on('end', function() { if (hadErr) return; cb(undefined, msg); }); […]

删除当前正在发出的事件的事件侦听器

我有以下示例应用程序,用Node.js编写: 'use strict'; var events = require('events'), util = require('util'); var EventEmitter = events.EventEmitter; var Foo = function () {}; util.inherits(Foo, EventEmitter); var foo = new Foo(); foo.once('x', function () { foo.removeAllListeners(); console.log('Google!'); }); foo.once('x', function () { foo.removeAllListeners(); console.log('Yahoo!'); }); foo.emit('x'); 它打印: Google! Yahoo! 现在我的问题是:显然removeAllListeners不会影响当前绑定到事件的事件侦听器。 这是随机的,还是这是故意的? (我用0.10.32和0.11.13检查了这个) 我的问题的背景是:如果我绑定两个事件处理程序到一个stream的end事件,其中一个调用removeAllListeners ,Node.js是否保证两个将始终运行,或者这只是一个好运?

Node.js EventEmitter事件不再在节点12.1+上触发

我已经将问题解决回到以下代码: var EventEmitter = require("events").EventEmitter, util = require('util'); function Foo() { EventEmitter.call(this); } util.inherits(Foo, EventEmitter); Foo.prototype.on('hello', function() { console.log("World"); }); Foo.prototype.start = function() { console.log('Hello'); this.emit('hello'); } var foo = new Foo(); foo.start(); 使用Node v0.10.36这个代码输出: 你好,世界 但是使用Node v0.12.1的代码输出: 你好 看起来监听器在Node的更高版本中不再起作用。 这是模块的一部分,是导出/需要的,所以我试图让听众远离模块的一个实例。 任何人都可以解释为什么这停止工作,以及build议如何做到这一点。

如何保护TCP连接 – nodejs?

我有以下sample code在tcp server var server = net.createServer(); server.on('connection', function (socket) { if(restrictedIP == sock.remoteAddress){ //How to close the particular connection safely without //affecting other connections } socket.on('data', function(data) { console.log(data); }); socket.on('close', function(data) { console.log('client disconnected'); }); }); server.listen(3000, '127.0.0.1'); 注意:我有一个检查来validation客户端/服务器ip(第三行)。 问题: 这个逻辑听起来不错,可以validation客户端/服务器。 主要的是,如何从受限的IP地址closures特定的连接(第四行 – 评论) 场景: 我有两个服务器,一个是客户端服务器,它是express / http服务器,可以命名为server1-express ,另外一个是命名为server2-tcp tcp服务器。 server1-express服务器将使用tcp与server2-tcp进行通信。 server2-tcp应该只允许这个特定的server1-express服务器,它不应该允许连接任何其他的ip, 使用socket.destroy()会使server2-tcp崩溃。 […]

将callback函数传递给原型

试验一个消息模块,该模块将提供在Node应用程序中的几个模块之间发送和侦听事件的方法。 这个尝试是相当新的。 我的目标是初始化一个监听器,并将其直接送入callback函数。 在这一点上,语法和JS原型开始绊倒。 var events = require('events'); var inter_com = new events.EventEmitter(); var com_bus = { initListener:function(listener_name, callback){ this.listener_name = listener_name; this.callback_function = callback; inter_com.on(this.listener_name, this.callback_function); }, sendMessage:function(data){ inter_com.emit(this.listener_name,data); console.log('test event sent'); } } var instance_of_com = Object.create(com_bus); instance_of_com.initListeners('testing',pipeMe); instance_of_com.sendMessage('its good to be the king'); var pipeMe = function(data){console.log(data)};`

为什么反应堆模式(Twisted,Gevent,Node.js等)

从阅读这篇文章, http://www.artima.com/articles/io_design_patternsP.html 我明白,反应器模式是完全asynchronous的,而反应堆模式不是。 我所知道的所有stream行的asynchronous事件驱动networking框架(Twisted,Gevent,Tornado,Asyncio和Node.js)都适用于反应器devise模式。 这是为什么? 前摄器模式不能提供更好的性能吗?

如何在NodeJS中捕获自定义事件

好吧,这可能是一个愚蠢的问题,我尝试过在这里和谷歌search,但似乎没有真正的答案,因为它只是不够具体的我目前的情况( 有像我知道的JS事件吨信息,被告知没有问题真的很愚蠢)。 我想在NodeJS中发出一个自定义的事件,只要达到一定的频率。 所以当我在播放一首歌的时候,它会超过80分贝,我想发出一个事件。 我如何在我的networking浏览器中捕获这个事件? 我可能需要启动服务器,我知道。 但是,我如何从我的服务器发送事件,更重要的是,我怎样才能抓住他们的客户端呢? (所以我可以使用A帧,并做一些不错的视听)。 这是我目前的代码,目前我没有对我的服务器做任何事情,但我的audio分析(从Ableton)工作。 'use strict'; let Max4Node = require('max4node'); let EventEmitter = require("events").EventEmitter; let ee = new EventEmitter(); // Server let http = require('http'); let handleRequest = (request, response) => { response.end(`It works! ${request.url}`); } let server = http.createServer(handleRequest); const PORT=8080; server.listen(PORT, function(){ console.log(`Server listening on: http://localhost:${PORT}`); }); let […]

用fs读取文件后parsingJson

我试图build立两个node.js脚本之间的通信。 第一个获取请求并将响应写入文件。 第二个观察文件,然后他读取它,并提示结果。 第一个(然后写) var request = require('request'); var parseString = require('xml2js').parseString; var fs = require('fs'); //Some needed variables streamInterval = setInterval(function() { request.get(addr, function (error, response, body) { if (!error && response.statusCode == 200) { parseString(body,{ explicitArray : false, ignoreAttrs : true }, function (err, result) { var jsonResult = JSON.stringify(result); var result = […]

promis中的Nodejs事件不能解决

当我打电话pdfCreate ,一个事件被加载,工作正常。 然后createIncidentReport被包含的服务调用,这工作正常。 一旦将PDF写入磁盘,将调用pdfStream.on('finish') ,这可以在控制台上正常工作。 日志被写入,但是然后邮件服务不被调用。 我应该如何解决这个承诺? function pdfCreate(incidentId) { Incident.findById(incidentId) .then(incident => pdfService.createIncidentReport(incident)) .then(() => mailservice.sendPdfCreatedMail(incident)); } function createIncidentReport(incident, res) { return new Promise((resolve, reject) => { let pdfStream = fs.createWriteStream(settings.PDF.DIRECTORY + incident.id + '.pdf'); incidentReport.pipe(pdfStream); pdfStream.on('finish', function () { console.log('finished writing pdf') resolve(); }); } } function sendPdfCreatedMail(incident) { console.log('mail'); let message = […]

在页面closures后向node.js发送消息

所以我很新,所以我很抱歉,如果这是一个完全错误的做法,但我目前正在使用express和socket.io使用node.js编程一个小聊天应用程序。 我设法得到一个login消息logging到控制台,但我真的很苦恼注销之一。 当用户打开页面时,我将房间名称和用户名从一个cookie中取出,并发送到服务器,如下所示: var socket = io(); var roomname = readCookie('Roomname'); var nickname = readCookie('Nickname'); var data = {'type': 'user', 'channel': roomname, 'user': nickname, 'data': "joined"}; socket.emit('chat', data); 之后,我在服务器端过滤消息,并将答案发送给所有这样的客户端: case 'user': io.emit('chat/' + msg.channel, {type: 'user', user: msg.user, data: msg.data}); break; 我总是发送string“聊天”,然后房间名称作为频道名称,这样只有右侧房间的用户才能看到该消息。 在那之后,我清理了客户端收到了什么样的消息: case 'user': console.log(msg.user + " just " + msg.data + " the […]