以下片段記錄了所有的HTTP連接錯誤,獨立的他們的呼叫網站:
// install error handler on all sockets to provide context for ECONNREFUSED and smilar errors
// this is not an official API and may break at some point
// it will also likely log this error multiple times, which the socketErrorId helps identify
var http = require('http');
var net = require('net');
var errorCounter = 0;
http.globalAgent.createConnection = function (options) {
var socket = net.createConnection(options)
socket.on('error', function (error) {
errorCounter += 1;
error.socketErrorId = errorCounter;
console.log('socket error, while connecting to ', options.href, error);
})
return socket
}
我現在已經在生產了一個星期這個運行,它幫助確定了,否則無法連接問題放下。
選項對象的屬性不僅僅是href
,儘管這對我來說是最有用的。下面是一個測試,我做了一個完整的列表:看到在Twitter上我lamentions後domain, _events, _maxListeners, callback, uri, headers, method, readable, writable, explicitMethod, _qs, _auth, _oauth, _multipart, _redirect, _tunnel, setHeader, hasHeader, getHeader, removeHeader, localAddress, pool, dests, __isRequestRequest, _callback, proxy, tunnel, setHost, originalCookieHeader, _disableCookies, _jar, port, host, path, httpModule, agentClass, agent, _started, href, servername, encoding
的片段上方是基於a gist someone wrote for me。
從'ECONNREFUSED'的[POSIX'connect'系統調用參考](http://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.html):「目標地址沒有監聽連接或拒絕了連接請求。「最有可能的原因?沒有人在您試圖連接的地址/端口上監聽連接。如果有*有人在傾聽,那麼你有沒有檢查你的防火牆? –
在查看代碼之前,爲什麼不從tcpdump(或Wireshark)和Fiddler開始,以確定哪個服務器和服務拒絕連接?使用tcpdump(或Wireshark),你可以找到拒絕它的IP和端口。使用Fiddler,如果它是一段時間的文件請求,您可以瞭解哪個請求失敗(通過查看以前的請求),並且您可以通過SSL查看請求。這會給你一個第一個想法。 – rodolk
@rodolk謝謝,這是一個好主意,但如果問題只發生在我無法運行這些工具的系統上,也可能不切實際。 –