Tag: 监听器

Node.js重复监听器问题

我是node.js的新手,很难掌握事件监听器/发射器的dynamic。 我正在尝试为典型的“新闻源”应用设置一个简单的长轮询监听器。 我可以使用下面的代码注册和发送事件给听众。 我的问题是,每发生一个事件,它被推送到客户端多个(两个或更多!)次。 var http = require('http'), events = require('events'), url = require('url'); var event_emitter = new events.EventEmitter(); http.createServer(function(req,res) { var uriParse = url.parse(req.url,true); var pathname = uriParse.pathname; console.log(req.url); if (pathname=="//register") { var thisRes = res; event_emitter.addListener('event',function(actionid){ if (thisRes) { thisRes.writeHead(200, { "Content-Type": "text/plain" }); thisRes.end(actionid); thisRes = null; } }); } else if […]

删除包装在匿名函数中的命名callback?

有没有一种方法来删除传入的命名callback函数中的包装在一个匿名函数的侦听器? UPDATE。 下面更完整的代码示例。 这里是细节。 我有一个函数,在一个命名的callback传递。 之前 function read (message, named_callback ) { var named_callback = named_callback || default_callback , message = message || "Choose: "; stdout.write(message); stdin.resume(); stdin.setEncoding('utf8'); stdin.on('data', named_callback); }); }; 所有named_callback采取并准备一个传入的用户input(答案)。 answer = answer.trim().toLowerCase(); 我到处都是重复修剪和缩小线! 我想把这个步骤放到一个地方,所以试图在答案被传递之前做好准备。 我写了这个: 后 function read (message, named_callback ) { var named_callback = named_callback || default_callback , message = […]

RemoveListener移除在“this”侦听器之后启动的所有侦听器

我有一个socket.io服务器,在每个socket.io连接中都有一个自定义的方法'looper.output'。 每当我closures一个socket.io连接,我启动另一个自定义方法“looper.disconnect”,应该删除closures客户端的“输出”侦听器。 我的问题是,无论何时closures客户端,looper.disconnect不仅从该客户端中删除侦听器,还会从closures客户端后启动的每个客户端中删除侦听器。 例如,如果我有4个客户端A,B,C和D,也按该顺序连接到服务器,并closures客户端C; looper.disconnect将删除C和D的侦听器,但只保留A和B. 我需要改变什么来使looper.disconnect只删除调用它的客户端的侦听器? 在上面的例子中,我只想要删除客户端C的侦听器。 var express = require('express'); var http = require('http'); var spawn = require('child_process').spawn; var util = require('util'); var fs = require('fs'); var EventEmitter = require('events').EventEmitter; var sys = require('sys'); var app = express(), server = http.createServer(app), io = require('socket.io').listen(server); function Looper(req) { this.req = req; EventEmitter.call(this); } sys.inherits(Looper, EventEmitter); […]

鼓舞听众

我是一个巨大的承诺链,但是我意识到,其中一个函数返回一个对象,具有监听器,并响应像callback object.on('data', function(err, data) { //do something }); object.on('exit', function(err, data) { //do something }); 我想知道是否有办法使用承诺来实现这一点,并把它们变成可靠的。 有没有其他select重写我的整个承诺链使用callback?

NodeJS Redis监听器

是否有可能在nodejs中侦听来自redis的更改的值事件? 情况:我有一个NodeJS应用程序,它显示来自另一个应用程序(同一台服务器上的原生应用程序,让我们调用它,让我们调用节点应用程序栏)的实时数据。 Foo将机器状态保存在redis键“状态”中。 栏注册并显示它。 你怎么能抓住这个事件? 编辑 Pierres解决scheme正常工作获取键,但我如何检索值? 我试过这样,但是一个parseError发生: var redis = require("redis"); var client_redis = redis.createClient(); client_redis.config('set', 'notify-keyspace-events', 'KEA'); client_redis.subscribe('__keyevent@0__:set'); client_redis.on('message', function(channel, key) { client_redis.get(key, function(error, result) { if (error) console.log(error); else console.log(result); }); }); 错误 $ { ReplyError> at parseError (/home/pi/Website/node_modules/redis-parser/lib/parser.js:181:12) -bash: syntax error near unexpected token `(' 编辑#2 看起来像client_redis.subscribe('…')阻止客户端读取值到相应的键。 我添加了第二个读取值的客户端。 工作示例: var redis […]

Node.js事件监听器被阻止?

使用以下代码,我注册了一个node.js事件侦听器,该侦听器正在等待来自通过名为zmqevent的全局nodejs EventEmitter转发的zeromq连接的响应。 global.zmqevent.removeAllListeners(req.user._id) global.zmqevent.on(req.user._id, function (msg, status) { console.log('event triggered'); }); global.zmq_controller_pub.send(recipient + " " + String(req.user._id) + " " + "getReportSingle"); console.log("1"); console.log("1"); console.log("1"); console.log("1"); console.log("1"); console.log("1"); console.log("1"); console.log("1"); 基本上事件队列的作品。 zmq_controller_pub.send将请求发送到我的外部脚本,响应到达node.js,发出一个node.js事件,它触发上面定义的事件侦听器。 我怎样才能让事件监听器在我的脚本结尾处中断console.log()链? 电stream输出如下所示: 1 1 1 1 1 1 1 1 event triggered 基本上我想等待来自我的zeromq连接的响应2秒,并且如果没有响应到达,则激活另外的“离线”结果。 但是即使这个简单的例子还没有起作用,事件只是在我的脚本的最后才被解雇。 你有好主意吗? 显然必须有一个愚蠢的错误…

使用下载pipe理器取消下载时,Nodejs内存泄漏

我使用Expressjs 3和Nodejs 0.10创build了一个简单的文件下载器 function download(req, res, filepath, filename){ res.header('Content-Type', 'application/force-download'); res.header('Content-Type', 'application/octet-stream'); res.attachment(filename); res.download(filepath, filename); } 一切正常,但是当我使用下载pipe理器(例如Internet Download Manager)testing应用程序时,当我放弃或取消下载(在下载之前或下载期间)时,会发出警告: Trace at Socket.EventEmitter.addListener (events.js:160:15) at Socket.Readable.on (_stream_readable.js:653:33) at Socket.EventEmitter.once (events.js:179:8) at TCP.onread (net.js:512:26) (node) warning: <b>possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.</b> 如何在中止文件下载后删除监听器?

Node.js中的MongoDb监听器

我想根据条件来侦听MongoDb集合中的新logging,并通过Socket.Io将它们发送给客户端 正如我所看到的,应该是这样的: var lastTime = Date.now(); while(true) { getRecordsLaterThan(lastTime, function(results) { if (results) { for (let result of results) { lastTime = result.created_on; // send result via Socket.Io } } }); // sleep(200 ms) } 我对Node和JS很新,有时候很难理解它的执行stream程。 在这种情况下,无法弄清楚如何在每次迭代之后使循环hibernate。 另外我也怀疑,也许应该用完全不同的方式来完成Node。

Node.js:听众的麻烦

我在Node.js中开发了我的第一个应用程序,我觉得我听不懂如何工作,因为我写的例子并没有显示我以为它会显示什么。 我想使用一个模块(msfnode)这是一个metasploit RPC客户端,所以它通过websockets连接。 我做了一个类,构造函数有这样的代码: this.clientmsf = new MetasploitClient({ login : options.login || 'myLogin', password : options.password || 'myPassword' }); this.clientmsf.on('connected',function(err,token) { if (err) throw err; }); 所以我想我可以在该类的其他function中使用对象“clientmsf”,并显示错误:error_message:“无效的身份validation令牌”。 这是代码: this.clientmsf.exec(['console.create'], function(err,r){ consoleID = r.id; console.log(r); }); 我想我有这个错误,因为我不知道node.js的所有概念,所以如果有人帮助我,我将非常感激。 非常感谢你。 PD。 这是msfnode库的一个例子: var metasploitClient = require('metasploitJSClient'); var onConnect = function(err,token) { if (err) { console.log(err.error_message); process.exit(0); } metasploitVersion(); […]

如果侦听器尚未添加,并且侦听器处理程序是匿名函数,则在nodeJS中添加侦听器

有没有办法来检查一个侦听器是否已经存在的node.js中的对象? 我想要实现以下场景: 获取数据库的对象 做一些操作 添加监听器,如错误,结果,stream失等,如果相同的监听器尚未添加[假设对于所有的操作监听器操作是相同的] 我想优化添加侦听器的方式,如果我们尝试添加一个现有的侦听器,新的侦听器将不会被添加。 节点文档说:“ 不检查是否已经添加了侦听器。多个调用传递相同的eventName和listener的组合将导致添加和调用多个侦听器。 有没有办法解决它? [编辑] – 添加一些示例代码 connpool.getConnection(function(err, connection) { var querystr = "Some valid SQL query"; connection.execute(querystr, data, function(err, rows) { if (err) { console.error(err); } connection.on('error', function(err){onErr(err,connection);}); do some stuff cleanup(connection); }); }) var onErr = function(err, connection) { console.error({"Error message"}); connection.release(); cleanup(connection); }; var cleanup = function(conn) […]