我的 node.js 应用程序正在使用http.request
REST API http://army.gov/launch-nukes
,我需要区分三种可能的情况:
Success
-- 服务端回答是肯定的。我知道我的敌人被摧毁了。Failure
- 我从服务器收到错误,或者无法连接到服务器。我还有敌人。Unknown
-建立与服务器的连接后,我已经发送了请求 - 但不确定发生了什么。这可能意味着请求从未发送到服务器,或者服务器对我的响应从未发送过。我可能刚刚开始了一场世界大战,也可能没有。
正如你所看到的,区分Failure
和Unknown
案例对我来说非常重要,因为它们有非常不同的后果和我需要采取的不同行动。
我也非常想使用http Keep-Alive——我能说什么,我有点好战,并计划在突发情况下发出大量请求(然后很长一段时间内什么都没有)
--
问题的核心是如何将连接错误/超时(即 a Failure
)与将请求放在线路上后发生的错误/超时(即 a )分开Unknown
。
在伪代码逻辑中,我想要这个:
var tcp = openConnectionTo('army.gov') // start a new connection, or get an kept-alive one
tcp.on('error', FAILURE_CASE);
tcp.on('connectionEstablished', function (connection) {
var req = connection.httpGetRequest('launch-nukes');
req.on('timeout', UNKNOWN_CASE);
req.on('response', /* read server response and decide FAILURE OR SUCCESS */);
}
)