1
我正在處理與另一個節點應用程序交互的測試工具,並驗證其他應用程序是否正常工作。我需要能夠在兩個不同的端口上偵聽兩個不同的協議,在node.js中的同一個進程中。具體來說,我攔截了一個簡單的換行符文本協議(acceptorone)和HTTP請求(acceptortwo)。是否有可能在單個node.js進程中監聽兩個net.createServer()?
目前,我有這樣的:
var acceptorone = net.createServer();
acceptorone.listen(portone);
var acceptortwo = http.createServer();
acceptortwo.listen(porttwo);
然而,當我嘗試這個,我得到Error: listen EADDRINUSE
。這兩個代碼路徑都可以獨立工作,如果其中一個listen()被註釋掉了,那麼一切都很好。
谷歌搜索一下會產生一個解決方案,涉及幾個進程。但是,這是在測試框架中運行的,所以我需要將所有內容都放在同一個進程中。諸如statsd之類的應用程序不會同時接受TCP和UDP連接,所以我不確定爲什麼同時監聽多個TCP套接字會受到限制。任何人都可以解釋這個問題嗎?謝謝。
啊哈!由於這是在一個測試框架中,服務器正在被反覆創建和銷燬。我只接近一個接受者,而不是兩個接受者。這導致了我看到的EADDRINUSE。謝謝你的幫助! – wickedchicken
優秀;我認爲你應該在自己的權利中加上一個答案,以便未來的訪問者能夠更輕鬆地找到這些信息:_Beware your testing infrastructure_。 :) – sarnold