鍍金池/ 問答/數(shù)據(jù)庫(kù)  HTML/ mongoose的報(bào)錯(cuò):timed out 和 socket closed 有什

mongoose的報(bào)錯(cuò):timed out 和 socket closed 有什么區(qū)別?分別在什么情況下出現(xiàn)?

最近生產(chǎn)環(huán)境中發(fā)現(xiàn)一個(gè)讀取數(shù)據(jù)的接口返回時(shí)間過長(zhǎng)。
項(xiàng)目使用的是 nodejs + mongodb
開發(fā)使用的依賴:

  "dependencies": {
    "express": "2.5.10",
    "iconv-lite": "^0.4.13",
    "ioredis": "^1.15.1",
    "log4js": "^0.6.35",
    "mongoose": "^4.4.13",
    "node-schedule": "~1.0.0",
    "node-xlsx": "^0.4.0",
    "superagent": "3.8.2"
  }

查看日志的時(shí)候,發(fā)現(xiàn)報(bào)錯(cuò)信息是:
生產(chǎn)環(huán)境報(bào)錯(cuò)信息

我們猜想是由于網(wǎng)絡(luò)原因,導(dǎo)致服務(wù)于數(shù)據(jù)庫(kù)鏈接問題,所以我們用類似的環(huán)境想復(fù)現(xiàn)此為問題。

復(fù)現(xiàn)的過程是用 wrk 工具連續(xù)訪問用一個(gè)接口一段時(shí)間,在此時(shí)間內(nèi)設(shè)置服務(wù)器防火墻,模擬斷網(wǎng)情況。
結(jié)果得到的報(bào)錯(cuò)信息如下:
測(cè)試環(huán)境報(bào)錯(cuò)信息

問題如題:

  1. mongoose的報(bào)錯(cuò):timed out 和 socket closed 有什么區(qū)別?
  2. 分別在什么情況下出現(xiàn)?
回答
編輯回答
陌璃

我的理解是timed out屬于被動(dòng)關(guān)閉,服務(wù)器不響應(yīng)也不理你,socket closed屬于主動(dòng)關(guān)閉,服務(wù)器直接就拒絕了。mongoose監(jiān)聽timedoutclose(had_error)只是為了區(qū)分錯(cuò)誤類型,最終都執(zhí)行了socket.end()。

2018年4月8日 00:00