Articles of timeout

Heroku H12超时错误与Node.js

目前,我正在使用Node hapijs框架开发一个REST API。 API部署在Heroku上。 在API中有一个GET端点,它发出一个get请求来从第三方检索数据并在发送回复之前处理数据。 这个特定的terminal会不时地超时。 当端点超时时, Heroku返回一个H12错误 。 一旦超时,对该端点的后续请求将导致H12错误。 我必须在Heroku上重新启动应用程序才能使端点再次工作。 API中的其他端点不会受到此错误的任何影响,即使在发生错误之后仍能继续正常工作。 在我的debugging过程中,通过查看日志,似乎有些时候,第三方API没有返回响应,导致错误。 我尝试了以下解决scheme来尝试解决问题: 我正在使用请求库来发出请求。 因此,我已经尝试将超时设置为5000毫秒,作为传入请求的选项的一部分。 它有时工作…超时被触发,端点发送与请求相关的超时错误。 这是我想要的那种行为,因为随后对端点的请求工作。 但是,有时候请求超时没有被触发,但Heroku仍然返回一个H12错误(总是在30秒之后,Heroku默认)。 之后,对该端点的后续请求将返回H12错误(也是30秒之后)。 似乎有些过程被“卡住”在Heroku上,并没有终止,直到我重新启动应用程序。 我试着给hapi.js路由configuration对象添加一个超时。 我得到了和上面相同的结果。 我一直在进行研究,并怀疑问题与这里和这里给出的描述有关。 看起来在应用程序服务器级别设置一个超时可以发送一个SIGKILL给Heroku工作人员可能会有所斩获。 在Ruby中看起来相当简单,但我找不到有关如何在Node中执行此操作的更多信息。 任何有识之士都非常感激。 我知道,向第三方提出请求时可能会发生超时。 这不是问题。 问题是terminal似乎在超时后“停滞”在Heroku上,并且变得没有反应。 谢谢您的帮助!

Node.js服务扼杀和死亡一天一次

本周每天我都重新开始我们的节点服务。 每次它只是退出以下消息: node.js:134 throw e; // process.nextTick error, or 'error' event on first tick ^ Error: ETIMEDOUT, Connection timed out at Socket._readImpl (net.js:163:14) at Socket._onReadable (net.js:633:22) at IOWatcher.onReadable [as callback] (net.js:177:10) 我很难辨别出我的代码中的一部分是为这个错误负责的,正是为什么这个错误非常严重以至于使得节点退出。 无论如何,我已经做了一些四处搜寻,并认为这可能只是一个未被捕获的错误事件。 我已经添加了一些('错误')侦听器到每个服务器实例与一些定制的日志消息,以确保它被捕获,但无济于事,我仍然必须今天与常规的错误信息工作..(和是不是真的有这样一个事情,就像必须被抓住的错误事件?) 一个简单的连接超时不应该真的崩溃整个服务。 该服务的主要目的是保持一个开放的TCP连接到一些连接客户端,并能够推出命令(这就像一个embedded式产品的私人僵尸networking)。 所以实际上95%的时间我们只是闲置我们的TCP套接字,并发送保持活动的数据包。 因此,客户可以随时断开连接而不中断其他连接客户端的服务。 我们正在使用最新的稳定的分支节点v0.4.13-pre并在ubuntu服务器上运行。

NPM请求模块(REST客户端)的默认超时是什么?

以下将我的node.js调用来检索一些数据,这需要超过1分钟。 这将在1分钟(60秒)超时。 我把一个控制台日志的延迟也。 不过,我已经configuration超时120秒,但它不反映。 我知道默认级别的nodejs服务器的超时时间是120秒,但我仍然从这个请求模块获取此次调用的超时时间(60秒)。 请提供你的见解。 var options = { method: 'post', url:url, timeout: 120000, json: true, headers: { "Content-Type": "application/json", "X-Authorization": "abc", "Accept-Encoding":"gzip" } } var startTime = new Date(); request(options, function(e, r, body) { var endTime = new Date(); var latencyTime = endTime – startTime; console.log("Ended. latencyTime:"+latencyTime/1000); res.status(200).send(body); });

是否有一个通用的机制来超时node.js中的事件?

我正在学习node.js,我能find的大多数例子都是处理简单的例子。 我更感兴趣的是构build真实世界的复杂系统,并估计node.js基于事件的模型如何处理实际应用程序的所有用例。 我想要应用的一种常见模式是让阻止执行超时,如果它没有在一定的超时时间内发生。 例如,如果执行数据库查询需要30秒以上,那么对于某些应用程序来说可能太多了。 或者如果读取文件需要10秒以上的时间。 对于我来说,超时的理想程序stream程与具有例外的程序stream程相似。 如果某个事件在某个预定义的超时限制内没有发生,那么事件监听器将被从事件循环中清除,并产生一个超时事件。 这个超时事件将有一个替代的监听器。 如果事件处理正常,则从事件循环中清除超时侦听器和事件侦听器。 有超时处理和清理超时过程的一般机制吗? 我知道一些types,如套接字有超时参数,但它不是一个适用于所有事件的一般机制。

setInterval返回Timer对象而不是intervalId

我想通过使用我打算存储在本地文件中的intervalId来清除间隔。 我的印象是分配setInterval返回它的intervalId但我似乎正在得到[object Timer] 。 var fs = require("fs"); var id = setInterval(function(){ console.log("tick"); }, 1000); console.log(id); var stream = fs.createWriteStream("id"); stream.once('open', function(fd) { stream.write(id); }); 我正在使用节点v4.9

Aws lambda描述实例超时

我有这个简单的describe实例函数,我试图通过AWS Lambda在nodejs中运行: var AWS = require('aws-sdk'); AWS.config.region = 'us-east-1'; exports.handler = function(event, context) { console.log("\n\nLoading handler\n\n"); var ec2 = new AWS.EC2(); ec2.describeInstances(function(err, data) { console.log("\nIn describe instances:\n"); if (err) { console.log(err, err.stack); context.done(null, 'Function Finished from error!'); // an error occurred }else { console.log("\n\n" + data + "\n\n"); context.done(null, 'Function Finished with data!'); // successful […]