Articles of 延迟

在NodeJS中select同步计算的时延太大?

我正在编写一个node.js插件来执行一些encryption计算,这可能需要大约1μs – 20μs。 现在我有一个select:将其实现为同步或asynchronous方法(在后台工作者上进行计算)? 很显然,networking和I / O,有时需要超过一毫秒,应该asynchronous完成。 parsingJSONinput很快,应该同步完成。 在我的情况下保持低延迟是重要的,但优化离开微秒感觉很像过早的优化。 因此,考虑到这种情况,我有兴趣就这个问题提出你的看法: 当使用node.js时,(同步)调用需要阻塞多长时间,直到您决定在后台线程上asynchronous运行它为止?

是否有像node.js中的延迟(Q)监视器?

我希望看到所有未解决的状态(如果可能的话,所有的延迟日志:初始化,未解决,已解决/拒绝状态)。 有没有什么机制呢? 例如: Q.getAllDeferreds()或Q.getLog()

用Q.deferred捕获错误

我有一个nodeJS项目,我希望使用asynchronousfunction。 也就是说,我正在使用Q库。 我有一个叫做someFunction()的函数,我希望返回一个promise。 有了这个function,我就可以检查这个承诺是否已经解决或被拒绝了,如下所示: someFunction() .then( function(results) { console.log("Success!"); }, function (error) { console.log("An error occurred, and I would wish to log it for example"); } ); 我对上面的函数直观的预期是,错误函数会捕获所有可能的错误。 所以如果在someFunction内部引发一些exception,我可以放心,错误函数将会运行('then'之后的第二个函数)。 但似乎并非如此。 例如,假设someFunction将被定义如下: function someFunction() { var deferred = Q.defer(); throw new Error("Can't bar."); deferred.resolve("success"); } 现在,如果我像调用上面的代码块一样调用someFunction()函数,它将不会运行错误函数。 这是为什么? Q.承诺错误的部分是不是错误? 为什么我应该手动拒绝发生的每一个错误? 我知道我可以将someFunction的全部内容设置为try / catch子句,然后拒绝这个延期的,但是那个感觉是错误的! 必须有更好的办法,我知道你们中有些人可以知道它! 有了这些信息,我开始思考deferred.reject和deferred.resolve是甚么意思呢? 这是否意味着要捕捉exception? 我真的应该手动通过所有的错误情况,并调用他们的deferred.reject? […]

水平缩放在服务器之间共享input的应用程序

我正在构build一个应用程序,通过websocket接受input,这个input必须共享回其他可能连接到其他前端服务器的客户端。 为了简单想象一个多用户多房间聊天应用程序。 让input路由到正确的连接不是一个问题,它是服务器之间的消息传递,并能够扩展并保持消息的延迟。 现在我有一个每个前端连接到的代理程序,然后他们订阅一个队列来查看连接可能需要知道的任何事情。 这样做是为了切断接收来自前端永远不会使用的代理的消息。 不过,我仍然可以获得大约75%到85%的消息从经纪商发回到每个前端。 在旅行中,我正在做消息validation,parsing和任何其他业务逻辑的工作。 在旅途中我循环了本地数组的订阅,并将消息发送到每个订阅的连接。 例如:如果我在11个前端服务器上收到10条消息(总共110条消息 – 10条消息在本地处理,而不是由代理发回)* 0.75乐观预订级别= 75条消息被发送回每个服务器处理。 所以我们有10个本地+75个broker = 85个消息被每个服务器处理一段时间。 现在,我不会有100个每秒100个的前端服务器,也许是两个,但是通过代理程序发回给每个前端服务器的消息似乎会爆炸我通过其他前端服务器收到的更多消息。 代理进程是一个与RabbitMQ和PostgreSQL交谈的小型node.js应用程序。 前端服务器也是node.js应用程序。 我能做什么,或者应该采取不同的措施,以在大批量生产期间保持低延迟? 更新回复用户评论:虽然我期望在队列之间的连接会导致他们的前端服务器订阅,我不认为它是100%的每个服务器的重叠。 最糟糕的情况是,每个前端服务器都必须订阅代理上的每个队列,从而从代理获得100%的消息。 乐观地说,只有大约75%的消息确实需要被发回到任何特定的前端服务器。 itaifrenkel的第二次更新:两个用户发送的消息可能以不同的顺序返回。 只有在延迟非常低的情况下才可以接受,而且只有在发送的消息非常接近时才会发生。 如果它发生的消息秒分开,那么我会说我们有一个延迟和规模的问题。 有一种情况我们需要显示一个历史logging,但是由于我觉得这个问题超出了问题的范围,所以我把这个logging留下了。

节点中第二次请求延迟15秒

我有一个服务器需要发送多个http请求。 但是除第一个请求之外,每个请求都会触发一个15秒的延迟。 如果我从linux控制台,POSTman或Fiddler发送请求,它的工作很好,没有延迟,但我不能得到它从节点工作。 我已经尝试使用https.get() , request ,套接字,甚至在一个单独的文件分叉请求。 但延误还在。 服务器回复正确的Connection: close标题。 该服务器是一个nginx服务器。 从节点工作的唯一时间是如果我把我的请求在一个单独的脚本,只运行这个脚本。 这可能是有效的,因为节点在请求后退出并释放连接。 我曾尝试与agent: false ,我发送Connection: close服务器,但它为什么需要15秒钟closures,为什么不使用小提琴手或POSTMAN时发生这种情况? 编辑:添加代码。 这个代码在我第一次运行的时候运行的非常完美,但是如果我运行了两次或者更多的话,延迟就会出现。 这是导致延迟的第二个函数,第一个函数工作正常。 async.waterfall([ function(cb) { console.log('making first connection'); var post_data = querystring.stringify({ 'login' : username, 'password' : password }); var options = { hostname: 'hostname', port: 443, path: '/path', method: 'POST', agent: agent, pool: false, keepAlive: false, […]

使用SuperLogin / Couchdb注册新用户的时间很长

用户注册SuperLogin意味着创build一个用户数据库。 经过调查,最终看起来像CouchDB本身和创build一个新的数据库时,30秒延迟。 我现在必须明白为什么CouchDB需要这么长时间才能做到这一点…] 在通过CouchDB数据库中的SuperLogin注册新用户时,我面临着30秒的延迟。 有时甚至更长,导致服务器超时错误。 但是,一切运行在同一台本地计算机上,Fauxton通常非常快,以及我在这个CouchDB数据库和PouchDB应用程序之间进行的数据同步。 你有什么想法如何解决这个问题? 或者至less如何获得有关发生的更多日志? 下边是: 1)Node / SuperLogin服务器的输出显示了OPTIONS和POST之间的30secs +延迟(OPTIONS是由于CORS引起的,但是POST查询来自postman时,我有相同的30secs + delay,所以CORS不应该是原因) 2)Server.js源代码 3)客户端代码。 非常感谢! 1)服务器输出 >node server.js Memory Adapter loaded App listening on 3000 ::1 – – [29/Nov/2016:21:44:42 +0000] "OPTIONS /auth/register HTTP/1.1" 204 – "http://localhost:8100/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36" ::1 – – [29/Nov/2016:21:45:19 +0000] […]

Node.js / q为什么这个函数没有被调用?

我有这个代码: /** * On message received */ socket.on('message', function (message) { global.logger.info('%s : message : %s', address.address, message); execute(message, socket) .then(function (value) { global.logger.debug('%s : success : %s', address.address, value); socket.emit('message', message); }, function (error) { global.logger.debug('%s : fail : %s', address.address, error); socket.emit('error', error); }); }); function execute(message, socket) { global.logger.debug('Got here : %s', […]

在settimeout内承诺

我试图在彼此延迟1秒的时间内执行承诺,因为我正在使用的API服务器每秒有一个请求限制。 这是我的代码目前 var delay = 0; return categories.reduce(function(promise, category) { var id = setTimeout(function() { promise.then(function() { return client.itemSearch({ searchIndex: configuration.SearchIndex, CategoryID: category.id, Keywords: currentKeyword }).then(function(results) { var title = results[0].Title; var cat = category.name; var price = results[0].Price; return db.insertProduct(title, cat, price); }); }).catch(function(err) { console.log("error", err); }); }, delay * 1000); delay += […]

技术可以最大限度地减less实时连接的延迟

我想从汽车传输一些遥测数据到一个networking应用程序。 硬件已经被照顾了。 它会通过Android设备每100ms发送一次数据。 我想知道什么有较低的延迟,websockets(socket.io)或webrtc(Datachannel)? 谢谢

如果延迟超过2147483648毫秒,setTimeout立即触发

问题 如果delay超过2147483648毫秒(24.8551天),该function将立即触发。 例 setTimeout(function(){ console.log('hey') }, 2147483648) // this fires early setTimeout(function(){ console.log('hey') }, 2147483647) // this works properly 我在Chrome v26和Node.js v8.21下试过了