Tag: 并发

与mongoose的交易行为

假设我有一个mongoose模式A 它看起来像这样: { arr: [{ num: Number, text: String }] } 现在我要执行以下操作: select一个即a 。 获取a.arr项目的实际数量。 向a.arr添加一个新的元素,数量和文本。 我的实现: A.findOne({_id: someId}, function(err, a) { var count = a.arr.length; a.push({ count: count, text: 'some text' }); a.save(…) }); 到目前为止工作良好。 但我的问题:如果我执行并发,让我们说5个进程,一些进程执行findOne之前保存其他人。 因此,前几个计数为0,然后在保存时立即为3或4进行下一个进程。 但是我想要执行串行。 如何实现? 谢谢!

在MongoDB中随机编辑随机数

我正在使用Expressjs,Socket.io和Mongoose进行多人游戏。 玩家join游戏,并在有足够的玩家玩时开始。 我会在游戏开始的同时提醒游戏中的所有玩家,所以我正在遇到并发问题,以改变游戏状态来“玩”和初始化angular色。 有时候angular色会被分配两次,这会弄乱游戏。 我试图按照这里和这里推荐的方法添加一个随机数,但是我无法工作,而且我也不是很了解它。 MongoDB是否将其视为具有特殊属性的特殊值? 或者是现在取决于MongoDB的一些现有属性? 以下是游戏模型的相关部分: GameSchema = mongoose.Schema nonce: type: mongoose.Schema.Types.ObjectId required: true default: mongoose.Types.ObjectId name: type: String required: true unique: true state: type: String enum: ["setup", "unstarted", "playing", "assassinating", "good_won", "bad_won", "discontinued"] default: "setup" required: true characters: [String] players: [{ type: mongoose.Schema.Types.ObjectId, ref: "Player" }] GameSchema.statics.findByIdAndStart = (id, done) -> Game […]

何时使用asynchronousnodejs?

我不是说ES7的asynchronous,但一般的asynchronous函数,如callback和promisses。 所以,我研究了关于NodeJS和事件循环。 一切都让我相信NodeJS有一种asynchronous的错觉。 据我所知,这只有当function必须通过外部媒体传递时才有效。 例如,执行一个读取文件(将被OS API使用),或者执行一个将使用外部API的请求。 我发现很less有人谈论这个问题,我想在这里和你讨论一下。 我的问题是:我是否正确的想法? 还有,如果有实际的方法来找出asynchronous工作在哪里,它不支付? 在某些情况下,如果我是正确的,asynchronous只会花费更多的内存。

node.js中的信号量 – 使用计数器variables

我一直在学习JavaScript一段时间,我似乎无法理解为什么下面的代码将无法正常工作。 我试图使主执行线等待asynchronous函数调用的结束使用信号量技术。 你可以看看这里的代码: var fs = require("fs"); var data = ""; var asyncDone = false; var fstream = fs.createReadStream("text.txt"); fstream.setEncoding("utf-8"); fstream.on("data", function (chunk) { data += chunk; }); fstream.on("end", function() { console.log("reading done"); console.log(data); asyncDone = true; }); while (! asyncDone) { } console.log("program terminating"); 任何帮助将不胜感激,谢谢。

哪些函数可以在node.js中同步工作?

例如,我正在写随机生成器与crypto.randomBytes(…)以及另一个asynchronous函数。 为了避免callback地狱,我虽然我可以使用crypto.randomBytes的同步function。 我的疑问是,如果我这样做,我的节点程序将停止每次执行代码? 然后,我想如果有一个asynchronous函数列表,它们的运行时间很短,这些函数可以作为同步函数,那么使用这个函数列表进行开发将非常容易。

在PostgreSQL中重新启动一个失败的事务

通过事务我的意思是几个SQL语句包装(例如)在一个begin isolation level serializable块。 并发事务可以使这个事务失败,即回滚。 如何在PostgreSQL中重启失败的事务?

Node.js Cluster + Express总是调用同一个worker

我正在尝试使用群集模块来处理与Express同时多个http请求。 通过下面的代码,我可以产生多个工作人员,并让他们都在同一个端口上进行监听。 大的for循环是模拟Web服务器上的重负载。 我想看到的是,如果工作人员在第二个请求进入时正忙于处理一个http请求,则会调用另一个worker并处理该第二个请求。 相反,当我尝试使用curl发出多个请求时,所有请求都由一个工作人员顺序处理; 即使他们已经分叉,也没有其他的工人被调用过。 难道是我使用Express不正确? 提前致谢! var cluster = require('cluster'); if (cluster.isMaster) { var cpuCount = require('os').cpus().length; for (var i = 0; i < cpuCount; i += 1) { cluster.fork(); } } else { var http = require('http'), app = require('express')(); http.createServer(app).listen(31415, function () { console.log(process.pid + " listening on 31415"); }); app.get('/', […]

SailsJS +水线并发数据库请求与承诺

我对SailsJS的吃水线并发性有些困惑。 目前我正在做这样的数据检索; var results = {}; // Get user by id 5 User.find('5', function(err, user) { results.user = user; // when it resolves, get messages Message.find({userId: '5'}, function(err, messages) { results.messages = messages; // when message query resolves, get other stuff OtherStuff.find({userId: '5'}, function(err, otherStuff) { results.otherStuff = otherStuff; res.view({results}); }); }); }); 问题是数据库调用不是并发的。 每一个请求都在先前的承诺完成之后启动。 […]

Node.js Promise没有按顺序执行

在我启动Web服务器之前,我想为configuration文件创build一些本地目录,而不是 // app.js var fsPromise = require('./fs-promise.js'); var httpPromise = require('./http-promise.js'); var promise = require('promise'); promise.all([fsPromise.createDir('configs'), fsPromise.createDir('logs')]) .then(httpPromise.startServer()); // fs-promise.js var fs = require('fs'); var promise = require('promise'); module.exports = { … createDir: function(directory) { return new promise(function(fulfill, reject) { //console.log('Creating new dir: ' + directory); var newDir = __dirname + "\\" + directory; fs.mkdir(newDir, […]

有没有办法在Redis获得locking? (Node.js的)

我的Node.js应用程序接受来自外部的连接。 每个连接处理程序在Redis上读取一个SET,最终修改该集合,然后继续。 问题是与此同时另一个asynchronous连接可以尝试读取相同的SET并尝试更新它或根据它读取的内容决定下一步。 我知道Redis尽力去做primefaces,但是这对于我的用例还不够。 想一想:设置被读取,以了解它是否满(有一个商业规则)。 如果它是完整的,那么会发生一些事情。 问题是,如果只剩下一个插槽,则两个半并发连接可以认为每个连接都是最后一个。 我得到溢出。 我有一种方法来保持连接“等待”很短的时间,其他最终需要更新设置状态? 我认为这是一个angular落的情况,非常非常不幸…但你知道:) 使用另一个键作为“锁”是一个选项,还是它臭?