Tag: 并发

在NodeJs中实现关键部分的正确方法

我有一个操作/任务,我需要运行,这是由一个事件被触发(我不认为这最后一件事情是非常重要的)触发。 事情是,这个任务主要由几个io操作,networking调用组成。 另外,我想以primefaces的方式运行这个任务,开始到结束,当时一个新的任务不应该开始,直到当前的任务完成。 我通常会使用某种types的关键部分来做到这一点,但我不认为js或节点库lib中存在这样的概念。 你如何build议我应该处理这样的情况? 谢谢 编辑:我已经看到了“不需要关键的部分,这是单线程”的意见多次在不同的职位,我认为这只是部分正确的,它只适用于同步行动。 假设使用关键部分的典型场景,你需要做2件事情A)检查一个条件的有效性,B)只有当A是真或者假时,才会应用一个动作,这个动作会翻转条件。 你不希望2个线程得出A同时为假,B应该完成的结论,所以你把A和B包装在关键部分,使它们成为primefaces。 在node.js中,如果A同步,那么你很好,没有其他线程将运行,你可以安全地做B。 但是如果A是asynchronous的,在callback触发之前,A的另一个事件可能会出现在事件队列中,在第一个事件被执行之前。

使用mongoose中间件去除相关文档时的并发性问题

假设我们有一个简单的应用程序,用户可以创build产品并对其进行评论。 产品和评论的模式可能是: var productSchema = new mongoose.Schema({ author_id: ObjectId, description: String }); var commentSchema = new mongoose.Schema({ product_id: ObjectId, author_id: ObjectId, message: String }); 我们要确保每个评论都是指现有的产品。 这可以很容易地完成与mongoose预存钩: commentSchema.pre("save", function(next) { Product.count({ _id: this.product_id }, function(err, count) { if (err || !count) { next(new Error("Could not find product")); } else { next(); } }); }); 另外,如果用户移除产品,我们希望移除该产品上的所有评论。 这可以很容易地完成使用预先删除挂钩: […]

Meteor.setTimeout和Meteor.methods之间的并发性

在我的Meteor应用程序中实现一个基于turnbased的多人游戏服务器,客户端通过发布/订阅接收游戏状态,并且可以调用Meteor方法sendTurn向服务器发送回合数据(他们不能直接更新游戏状态集合)。 var endRound = function(gameRound) { // check if gameRound has already ended / // if round results have already been determined // –> yes: do nothing // –> no: // determine round results // update collection // create next gameRound }; Meteor.methods({ sendTurn: function(turnParams) { // find gameRound data // validate turnParams against gameRound […]

Node.js支持并行吗?

我一直在研究并发和并行的区别。 Rob Pike在谈到关于并发性和并行性之间的差异时,在YouTube上发表了一个演讲。 他的演讲是在Google Go语言的背景下进行的。 据我所知,并发是能够处理多种事情的devise,而并行则是多个事物同时物理执行。 从我也明白,Node.js作为一个单线程进程运行。 因此,尽pipeNode支持并发执行callback的方式,它是否有能力处理任务的并行执行? 它可以设置为在单独的处理器上运行多个线程?

Node.jsdebugging跟踪似乎意味着多个线程的执行 – 如何正确解释这个?

我在Node.js上遇到一些麻烦,我想这个问题可能是我误解了Node.js的并发方法。 这里是我写的服务器的一个简单的例子。 这个想法是,服务器将用于自动化testing:它保留一个预期的“configuration”列表,并将它们与客户端发送的“configuration”进行比较。 //expectedConfigurations gets initialized up here var server = http.createServer(function(request, response) { switch (url.pathname) { case "/check-configuration": jsonData = ""; request.on("data", function(data) { return jsonData += data; }); request.on("end", function() { var configuration, errMsg, expectedConfiguration; console.log("finished reading json data", jsonData); expectedConfiguration = expectedConfigurations.shift(); console.log("Expected configuration", expectedConfiguration); configuration = new Set(JSON.parse(jsonData)); if (expectedConfiguration.equals(configuration)) { […]

作为一个单独的node.js进程运行一个函数?

是否有可能作为一个完全独立的node.js过程来运行一个函数? 例如: var parallel = require("parallel"); parallel(function(){ var app = require("express")(); app.on("/",function(req,res){ res.send("hi"); }); app.listen(80); },function callback(err,stdout){ console.log("process terminated!") }); 是这样的可能吗?

使用cluster和node-webworker构build高性能的node.js应用程序

我不是一个node.js主,所以我想对此有更多的观点。 我正在创build一个HTTP node.js Web服务器,它不仅能处理大量的并发连接,还能处理长时间运行的作业。 默认情况下,node.js在一个进程上运行,如果有一段代码需要很长时间才能执行任何后续连接,则必须等到代码结束之前连接的操作。 例如: var http = require('http'); http.createServer(function (req, res) { doSomething(); // This takes a long time to execute // Return a response }).listen(1337, "127.0.0.1"); 所以我想使用node-webworker库在单独的线程中运行所有长时间运行的作业: var http = require('http'); var sys = require('sys'); var Worker = require('webworker'); http.createServer(function (req, res) { var w = new Worker('doSomething.js'); // This takes a […]

node.js并发性

我是node.js新手 我正在testingsocket.io实时消息。 我喜欢它,我想用。 我有个问题。 Node.js服务器可以运行多less个并发? 我们的程序将大约100个并发。 所以,我担心这个。 我发现了另一个实时消息服务器APE。 哪一个更好 ? 我喜欢node.js,因为它易于学习,易于编写。 但是我找不到有关node.js服务器的并发性的讨论。 我的朋友公司正在使用APE,它可以控制2000左右。所以,我想知道关于node.js服务器。

将Nodejs模块加载到Web Worker中

我打算在我的Node.js应用程序中使用web worker来执行一些并发任务。 然而,由于'webworker-threads'模块遵循HTML5 web worker的实现,因此在web worker内部需要使用像require("fs")这样的Nodejs模块不起作用。 importScripts()可以加载js文件,但我想在web工作者内部的一个function,以便我可以require安装npm模块。 有没有解决方法?

Q承诺中的并发限制 – 节点

有什么方法来限制使用Q promise库的promise的并发性吗? 这个问题有点相关我怎样才能限制Q promise的并发性? 但问题是,我试图做这样的事情: for (var i = 0; i <= 1000; i++) { return Q.all([ task1(i), task2(i) ]); // <– limit this to 2 at a time. } 真正的用例是: 从数据库提取post 在数据库中像posts.forEach(function(post) {} 对于每个职位做任务1,任务2,任务3(检索社交计数器,检索评论计数等) 在数据库中保存新的发布数据。 但问题是节点正在同时执行所有文章的所有任务,例如同时向Facebook发送500个post的“点数”。 如何限制Q.all()所以一次只有2个职位正在执行他们的任务? 或者还有其他可行的解决scheme可以应用 注:大多数任务(如果不是全部)依赖于请求库