Articles of 并发性

将接收的实时dynamic数据推送给10,000个用户?

我正在对我正在开发的一个新项目提出一些指导,要求低延迟和高并发性。 该项目涉及从第三方供稿接收实时数据,经过一些基本处理和存储后,将这些值发送给网站上当前活动的所有用户。 数据通过HTTP Push到达,我目前的计划是使用Node.js接收这些数据,然后通过algorithm运行数据,然后更新某种数据库中的相关数据。 最后,更新通过websocket发送给网站的所有连接用户。 现在,我试图让这个可扩展性能够同时处理超过10,000个连接的用户,全部通过websocket连接,并且每3秒发送一次更新。 鉴于每个用户在此期间都可以与Web应用程序进行交互,这将导致许多请求来回。 现在,除了我所拥有的高层次的基本概念之外,决定将Ruby on Rails作为网站框架和节点j来处理它的“活力” – 我有点卡住了。 我不知道要使用什么样的数据库(我想这将是一个非关系数据库快速存储),我不知道如何构build这样一个设置的具体细节,以及如何实现逻辑。 所以我的问题是: 为了实现我的目标,我该如何构build这样一个应用程序,以及为了使其具有可伸缩性和实时性,我需要了解哪些内容? 非常感谢您的帮助。

Node.js中的响应顺序?

我已经阅读了关于Node.js和Event Loop的一些介绍性文章,但有一点是不清楚的 – 如果有多个并发请求,那么响应总是按请求的顺序连续的? 如果20个请求同时完成,那么第20个响应是否需要等待另外19个请求被清除(回复给客户端)? 更新:我想知道的是,这是否类似于多个setTimeouts排队?

创buildlocking,以便两个用户不使用相同的用户名创build帐户

我正在使用带有Node.js的Express服务器,并关心并发性,并防止用户同时创build具有相同用户名的帐户。 从我的underatanding,尽pipe主Node.js运行时是单线程的事实,它仍然是可能的一个function开始,而另一个尚未完成。 一种select是在Redis等外部源上创build一个锁,并使用它来控制并发 – 但是我的问题是 – 是否有一种可靠的方法来在本地JavaScript中控制这种情况? 例如,嵌套函数的某个级别基本上可以保证新请求在另一个完成之前不会启动某个调用(我怀疑它)。 更具体的说 – 我正在使用MongoDB的MongoDB。 使用Mongoose模式的内存中应该有唯一的用户列表。 那么会发生什么: (1)新用户使用用户名A进行注册 (2)node.js将A与索引的用户列表进行比较,发现A确实是一个新的用户名 (3)node.js进行数据库调用,将A添加到列表中 (4)之前(3)完成一个新的用户注册用户名A … node.js比较A与用户名索引,它看起来是唯一的,所以它发送一个插入数据库 这个问题似乎是真的。 我的猜测是解决这个问题的最好办法是外部locking。

在并发系统中做上下文logging是否有一个简洁的方法?

我的具体例子是Node.js,但我认为在任何基于事件循环的系统中都存在同样的问题。 考虑以下简单的应用程序: var logger = loggingmodule.Logger(); var server = http.createServer(function(req, res) { req.id = crypto.pseudoRandomBytes(10).toString('hex'); var log = logger.transaction(req.id); loadSomeAsyncData(log, function(err, data) { if (err) return bailout(err, req, res); doSomeAsyncAction(log, req.url, data.action, function(err, result) { if (err) return bailout(err, req, res); hydrateResultWithMoreAsyncData(log, data, result, onMoreData); function onMoreData(err, moreData) { if (err) return bailout(err, req, res); […]

如何testingnodejs并发请求

我想写一个简单的代码来testingnodejs并发性,当它收到很多请求。 我使用loadtest模块来模拟使用这个命令向服务器发送多个请求: loadtest -c 10 –rps 200 http://localhost:3000/ 我写在server.js中的简单代码: var http = require('http'); var server = http.createServer(); var cun=0; var step=0; function handleRequest(req,res) { console.log(step++); while(100000000>cun){ cun++; } cun=0; } server.on('request', handleRequest); server.listen(3000); 但是请求正在等待while循环closures 而且知道要解决这个问题我应该使用callback函数,但是不知道怎么写呢。

Node.js是成千上万人使用的Web应用程序的不错select,但是只有其中一些人才能访问相同的数据

我试图决定是否值得花时间投入学习Node.js的新程序。 AFAIU最大的好处就是Node让多个用户访问相同数据的过程比使用Apache和PHP更有效率。 该程序旨在被群体使用,所有的数据存储在我们的专用服务器上。 也就是说,同一个数据最多可以被一个组的所有成员访问(最多20个),但是数据库本身可能被任何使用该程序的人访问(为了好玩,假设多达100万)。 我的并发思想最好是基本的。 Node.js是否会改善组的体验(因为他们正在访问相同的数据),还是为每个人(因为他们正在访问相同的数据库)? 另外,这样的设置是否利用了Node的好处?

节点工作线程无法加载外部模块?

我试图在我的服务器上multithreading一个cpu密集型的工作。 我正在使用webworker线程。 Server.js :(相关部分) var Worker = require('webworker-threads').Worker; function doWork(req, res) { console.log("connection received"); var fibo = new Worker('plainworker.js'); fibo.onmessage = function (event) { res.json('fib(10) = ' + event.data); }; fibo.postMessage(10); } plainworker.js: var _ = require('underscore'); ///////////// <—- PROBLEM LINE function fibo (n) { return n > 1 ? fibo(n – 1) + fibo(n […]

并行数据库请求从Node.js SDK到Couchbase

我希望能够在短时间内向Couchbase商店发出几个Get请求,比如在半毫秒内。 我不能使用multiGet,因为我没有同时拥有所有的密钥。 但是,如果我很快发出了几个单独的获取请求,我相信他们将一次处理一个,如http://docs.couchbase.com/couchbase-devguide-2.5/index.html#retrieving-多键 。 我可能做的一件事情是在启动时为每个Get请求创build一个单独的Connection对象,但是我没有看到在任何地方推荐这个最佳实践。 这样的工作,即允许我快速并行获取并且是推荐的事情吗?

是sqlite的last_insert_rowidprimefaces?

我使用node.js sqlite3来操纵数据。 我使用这些代码插入数据到数据库,并获得插入ID: db.run("INSERT INTO myTable (name) VALUES ('test')"); db.get("SELECT last_insert_rowid() as id", function (err, row) { console.log('Last inserted id is: ' + row['id']); }); 我觉得这不太稳定。 我的数据库连接总是打开。 当我的服务器在来自客户端的多个同时连接上提供此代码时, SELECT last_insert_rowid()是否正确地获取id? 是sqlite的last_insert_rowidprimefaces? 谢谢。

node.js + mongo +多个实体的primefaces更新=头痛

我的设置: Node.js的 Mongojs 包含两个集合的简单数据库 – 库存和发票。 用户可以同时创build发票。 发票可能涉及多个库存项目。 我的问题: 保持清单的完整性。 设想一个情景是两个用户提交两个重叠项目集的发票。 天真(错误的)实现将执行以下操作: 对于发票中的每个项目,从库存集合中读取相应的项目。 修复库存项目的数量。 如果任何物品数量低于零 – 放弃与相关消息的请求给用户。 保存库存项目。 保存发票。 显然,这个实现是不好的,因为这两个用户的行为将会交错并相互影响。 在典型的阻塞服务器+关系数据库中,这是通过复杂的locking/事务scheme解决的。 什么是nodish + mongoish方法来解决这个问题? 有没有node.js平台为这些东西提供的工具?