Tag: multithreading

NodeJSsubprocess无法发送net.socket fd:3

当编写一个nodejsmultithreading包的时候,主线程可以通过fd:3发送内容,线程可以收到这个消息,但是线程不能通过fd:3发送任何东西 有什么我做错了吗? (line threader.js:45-59是问题显示的地方) 包 (现在只有在github上才能使用) 启动代码: var Thread = require("threader"); var task = Thread.task(function(){ //Do some calculation }, function(){ //When the calculation response has been sent }); task('a', 2);

使用throng,SIGINT监听器不会阻止退出节点

这个问题是关于节点模块群。 如节点文档中所述,当在SIGINT或/和SIGTERM上定义侦听器时,节点应阻止退出。 但throng总是会退出。 如果这些信号之一安装了监听器,则其默认行为将被删除(Node.js将不再退出)。 https://nodejs.org/api/process.html#process_signal_events 如何重现 使用GitHub上的默认示例并注释掉process.exit行,节点仍将退出进程。 const throng = require('./lib/throng'); throng({ workers: 1, master: startMaster, start: startWorker }); // This will only be called once function startMaster() { console.log(`Started master`); } // This will be called four times function startWorker()(id) { console.log(`Started worker ${ id }`); process.on('SIGTERM', () => { console.log(`Worker ${ id } […]

节点jsnetworking库 – 获取有关客户端(套接字)

我用socket.io使用nodejs集群,而在主线程中,我使用内置的networking库来侦听端口,并手动将连接(套接字)传递给worker(基于客户端的IP地址,所以如果客户端重新连接到服务器的客户端将join到同一个工人)。 这是行之有效的,但我想testing,我想从本地join不同的工作。 有没有什么办法获得有关客户端的信息(如浏览器名称,自定义参数)或其他任何东西,使本地主机上的两个或多个客户端不同? – 如果我能够在开发环境中将客户端join到基于浏览器的工作人员(Chrome客户端去工作人员1,Firefox客户端去工作人员2),这可能会很酷。 private createServer(): void { var self = this; this.masterServer = net.createServer(<any>{ pauseOnConnect: true }, (connection) => { console.log('server', connection); let worker = self.workers[self.getWorkerIndex(connection.remoteAddress, self.workerCount)]; worker.send('privateCon', connection); }).listen(self.serverPort); }

在集群模式下使用pm2和node.js安全

所以pm2是一个进程pipe理器,允许我在同一台服务器上启动我的应用程序的多个实例。 它的工作原理是负载均衡请求到所有实例。 所以我认为这是对Node.js环境进行假multithreading的一种forms。 然后我想到了以下情况: 如果我的Node.js应用程序实例连接到MongoDB并且实例0正在执行查找请求,而同时实例1实际上是插入到同一个集合中呢? MongoDB不是单线程的,它有一个线程池。 这是否意味着在MongoDB中可能存在冲突或线程安全与某种forms的互斥有关? 这只是一个例子。 pm2有可能导致这样的问题吗?

Node.js在类方法中产生多个线程

当作为类的方法调用时,如何多次运行单个方法multithreading? 起初我试图使用cluster模块,但是我意识到它只是从一开始就重新运行整个过程,理所当然地。 我如何实现如下所述的内容? 我想要一个类的方法来产生n个进程,当并行任务完成时,我可以解决方法返回的承诺。 下面的代码的问题是调用cluster.fork()将fork index.js进程。 index.js const Person = require('./Person.js'); var Mary = new Person('Mary'); Mary.run(5).then(() => {…}); console.log('I should only run once, but I am called 5 times too many'); Person.js const cluster = require('cluster'); class Person{ run(distance){ var completed = 0; return new Promise((resolve, reject) => { for(var i = 0; i […]

nodeJS中的并发安全短唯一整数ID生成

我有一个节点应用程序,我正在使用rethinkdb作为数据库。 id rethinkdb为每个文档生成的不是人类可读的,不适合现实世界的参考目的。 例如,我创build的每个用户都希望具有一个简短的整数ID,我可以用它来在现实世界中引用该用户。 我从数据库中得到的id不适合。 什么是并发安全的方式来生成一个短的唯一的整数ID?

asynchronous非阻塞事件驱动方法是“asynchronous编程”的唯一方法吗?

我对这里的术语有些困惑。 让一个程序由一些概念上不同的任务组成: 在asynchronous编程模型中,任务是相互交错的,但在一个单一的控制线程中。 即使在多处理器系统上,单线程asynchronous系统也会始终以交错执行。 没有实际的并行性。 事件驱动方法是做“asynchronous编程”的唯一方法吗?

node.js中的子/辅助线程

我有一个需求,我必须运行一个独立于主节点线程的进程。 基本上,目的是从主节点线程数据启动辅助进程,而不是等待callback或任何结果,因为辅助进程不必向主线程返回任何东西。 我想实现这一点,而不会阻塞主节点线程,主线程不应该在将数据传递到辅助线程后发生什么。 基本上,就二级进程而言,主线程的进程在将数据发送到辅助线程之后结束。 任何build议如何我可以实现这一目标? 我读了关于subprocess,webworkers,dnode和进程nexttick,但我不知道什么是实现它的最好方法。 我尝试了nexttick,但是我的经验是它仍然是主线程的一部分,虽然是asynchronous的。

我怎样才能在NodeJS中线程化image processing?

我在NodeJS上编写image processingWeb服务,在基本上我需要弄清楚如何使实际的image processing线程化。 当我通过Apache AB进行testing时,NodeJS只使用了一个内核,并且在这里做错了。 我如何重新devise这个简单的应用程序,以利用我的服务器CPU上的多个核心。 我放大了所有的input过滤,并简化了image processingfunction,让您了解应用程序结构,而不是长码位。 在app.js中 app.get('/generate/:q', function(req, res){ var textString = req.params.q; res.setHeader("Content-Type", "image/png"); res.end(generator.s()); }); 在generate.js中 var Canvas = require('canvas') , Font = Canvas.Font , fs = require('fs') , path = require("path") , plate = new Canvas.Image; //To keep plate in RAM between requests. fs.readFile(__dirname + '/plates/dhw132.png', function(err, squid){ if […]

node.js + express + threads_a_gogo阻止请求

我有节点js中的一段代码,需要几秒钟的完成,所以我开始使用threads_a_gogo模块( https://github.com/xk/node-threads-a-gogo )不阻止http请求。 我花了很多时间试图弄清楚为什么产生的威胁不起作用,因为我的请求仍然被阻止。 app.post('/ results.html',function(req,res){ 如果(config.debug) console.log(“线程创build”); var t = threads.create(); var r = new rounds(); t.eval(r.start(req,res),function(err,result){ r.finish(res); //t.destroy(); 如果(config.debug) console.log(“thread destroyed”); }); console.log(“请求完成”); }); console.log(“请求完成”); 仅在新线程完成后显示,但是假设几乎在请求完成时显示,并且在服务器完成之前显示对服务器的阻塞请求。 任何想法做什么即时错误? 谢谢