Articles of 队列

在Node.JS上的Socket.io之间实现一个队列

我已经使用Node.JS和Socket.io写了一个聊天。 聊天很简单:总是有两个人的房间,一个员工和一个客户。 现在我们的容量正在成长,我们正面临一些问题,如networking问题上的消息“消失”,我们希望在我们公司和我们的客户之间实现一个排队。 就像是: 对于图片上的每个NodeJS进程,我们有6个虚拟机位于负载均衡之后。 我想知道什么是使用队列的最佳方法。 我应该在每个房间的队列中创build一个主题吗? 例如:对于用户C和D之间的交互,它将使用消息/ c:d ; 对于用户A和B之间的交互,它将使用消息/ a:b 。 或者最好使用没有任何主题的单个队列,发布/订阅消息中的所有消息并为每个订户进行广播? 如果订户有房间,他将处理该消息。 在第一种方法中,我不确定我应该如何使用MQ客户端,因为我通常初始化它们并让它运行。 当我想要创build一个caching来存储MQClient时,每个客户端将负责一个主题,在我的脑海里听起来很奇怪 – 如果我有10k个房间,我将有10k个MQclient。

node.js lambda函数将logging从sql迁移到elasticsearch,使用队列限制asynchronous调用

我试图在node.js中实现下一个function:我必须从sql到1.200.000logging迁移到elasticsearch,我分成5万批次,一旦我解决了5分钟超时问题,我痛苦了这一点内存问题的aws lambda。 我发现这个async.queue限制在Node.js中的asynchronous调用,但我一定是做错了,因为它不能按预期工作。 我究竟做错了什么? 我怎样才能限制asynchronous调用importSQLData方法? 谢谢。 这是我的代码: exports.importData = function(batchNum,topNum,startNum){ var q = async.queue(function (task, callback) { console.log('hello ' + task.name); callback(); }, 2); q.drain = function () { console.log('all items have been processed'); } for (var y = 1; y <= batchNum; y++) { q.push(importSQLData(topNum, startNum), callback); // I don't know if this is […]

Swift队列和延迟过程

在迅速3.0 我需要在节点服务器上点击一个button发送一个字典,用户可以频繁地点击或点击这个button。 所以我需要一次又一次地把这个字典发送到队列中,并延迟一段时间。 同时用户可以多次按HIT键,但QUEUE会逐个单独执行,不依赖于单击button。 这是我的代码 func sendProductInCart(Product: NSString) { delayWithSeconds(5) { let msgToSend: String = String.init(format: "__JSON__START__%@__JSON__END__", Product) print("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++") print(msgToSend) let data: Data? = msgToSend.data(using: String.Encoding.utf8) _ = data?.withUnsafeBytes { self.outputStream.write($0, maxLength: (data?.count)!) } } } func delayWithSeconds(_ seconds: Double, completion: @escaping () -> ()) { DispatchQueue.main.asyncAfter(deadline: .now() + seconds) { completion() } } 但这是行不通的。 […]

下载进度条

我正在写一些networking软件,将从互联网上下载文件。 现在,我将设置一个后端作业队列,它将读取数据库以查看是否有任何新文件要下载。 然后,它会下载需要下载的任何内容,并以某种方式向网站的用户传达进度。 为了显示我正在考虑让下载脚本将数据写入memecached或redis的进度,以便网站上的ajax脚本可以读取caching条目并更新进度条,以便用户可以看到已下载了多less以及多less离开,等等… 所以这一切似乎易于pipe理,实际上我创build这种types的应用程序没有问题。 但是我想知道是否有任何软件在继续之前应该先看一下。 例如,对于任务队列pipe理,我在看http://celeryproject.org/ 。 有相当于PHP的吗? 对于前端ajax,我只是要读取使用jQuery和一个PHP脚本的caching项,并更新HTML。 你认为node.js在这种情况下值得使用吗? 我的意思是用户可能有10个同时下载每个拥有自己的进度条。 任何build议,将不胜感激。 谢谢

工人是否可以将消息发回给制作人

我有一个NodeJS应用程序,出现以下情况:我收到来自用户的请求来计算需要使用非常复杂的math公式的内容。 目前,我运行这个整个过程,找出价值,然后发回给用户。 不幸的是,这不是非常asynchronous友好:) 我想要做的是在后台运行这个整个操作,一旦任务完成,工人回到我的计算值,然后发回给用户。 我一直在寻找各种各样的工作队列,包括Kue , Celery , Resque和Beanstalk ,但是他们都没有提供这个function。 他们在发送电子邮件或运行任何不需要接收某种价值的工作方面工作的很好,只是简单的成功与否,但似乎没有任何东西允许工作者实际上将自定义消息发送回创build该任务的原始生产者。 我说错了,上面提到的所有队列都不支持吗? 如果是这样的话,请指出我可以在哪些文档中了解如何利用此function。 否则,你可以指向我的其他任何支持此function的人吗?

强制x客户端等待node.js中客户端y的callback的最佳实践

我正在尝试为node.js的不同客户端实现一个数据交付工具的caching系统。 这是一个http服务,我用快递处理请求。 我的caching系统需要支持三种情况: 案例1 – 没有caching:程序通过给定的get方法接收数据。 如果成功,则写入caching。 情况2 – 有一个caching:程序接收caching。 情况3 – 没有caching,但是相同请求的get方法已经被不同的客户端调用并且正在被处理。 程序需要等待另一个请求通过get方法接收到它的数据,并传递新写入的caching。 我用事件解决了“情况3”的问题。 我为每个客户/请求组合注册一个事件。 但是注册一个开放的事件感觉不是很优雅。 排队的使用也不是最好的解决scheme之一。

在同一时刻多次调用函数,但在nodejs中延迟执行不同的调用

我需要从不同的上下文中多次调用一个函数,但是我需要每次调用都不会在上一次调用之后经过一秒之后触发。 我会举一个例子: var i = 0; while(i<50) { do_something(i) i++ } function do_something(a) { console.log(a) } 我想要这个日志:'1',然后在第二个'2',然后在第二个'3'之后,然后在第二个'4'之后… 我不能使用简单的setInterval或setTimeout,因为这个函数“do_something(param)”可以在不同的来源在同一时间被调用,因为我正在与nodejs中的asynchronousfunction。 我希望保持通话的顺序,但是他们以最less的延迟一秒钟发射。 我想我应该将这些调用添加到一个队列,然后每秒一个调用出队和函数触发,但我真的不知道如何在nodejs中做到这一点。 先谢谢你

在单个进程中排队JavaScript代码

比方说,我在一个对象中有一堆的任务,每个都有一个date对象。 我想知道是否有可能使对象内的任务在单个进程中运行,并在调用date时触发。 这是一个例子: var tasks = [ "when": "1501121620", "what": function(){ console.log("hello world"); }, "when": "1501121625", "what": function(){ console.log("hello world x2"); }, ] 将这些数据存储在数据库中,以及从string中eval what脚本,我都没有问题。 我需要一个正确的方向。 我从来没有在节点世界看到过这样的事情。 我正在考虑使用hotload和使用文件系统,所以我不需要处理数据库。 我应该看看setInterval还是有更复杂的东西呢? 我知道像cron这样的东西存在,事情是我需要所有这些任务发生在已经存在的正在运行的进程中。 我需要能够添加一个新的任务队列没有结束的过程。 为了添加一个小环境,我需要一些排队socket.io.emit .emit()函数的方法。

在NodeJS中使用stream和asynchronous读取和处理大小文件

我在逐行处理文件列表时遇到问题。 这是我正在使用的代码: var LineReader = require("line-by-line"); var async = require("async"); var files = [ "small.txt", "medium.txt", "large.txt" ]; var queue = async.queue(function(task, next){ console.log(task); next(); }, 10); async.eachSeries( files, function (file, callback) { var lineReader = new LineReader(file, { encoding: "utf8", skipEmptyLines: true }); lineReader.on("error", function (err) { callback(err); }); lineReader.on("line", function (line) { lineReader.pause(); […]

节点GeoFire内存泄漏?

我似乎有一些非常基本的firebase + firebase-queue +在Node上运行的GeoFire代码,这看起来会导致内存泄漏,但是我并不相信我并没有把某些东西搞砸。 'use strict'; if (!process.env.FIREBASE_PROJECT_ID) { require('dotenv').config({ silent: true }); } let fbConfig = require('./firebase-config'); let fbNodes = fbConfig.NODES; let Queue = require('firebase-queue'); let admin = require("firebase-admin"); let GeoFire = require('geofire'); admin.initializeApp({ credential: admin.credential.cert(fbConfig.FIREBASE_SERVICE_ACCOUNT), databaseURL: fbConfig.APP_SETTINGS.databaseURL }); let db = admin.database(); let queueRef = db.ref(fbNodes.QUEUE); let geoFire = new GeoFire(db.ref(fbNodes.GEOFIRE)); var q […]