第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

nodejs中如何解除已綁定的端口

nodejs中如何解除已綁定的端口

翻翻過去那場雪 2019-04-13 08:46:41
我有nodejs進程A和nodejs進程B。進程A在9000端口開了一個httpserver。進程B不斷嘗試綁定9000端口,并且由于端口已被占用而失敗。這很正?!,F(xiàn)在進程A想要釋放綁定的9000端口以使得進程B可以綁定??墒沁M程A不能退出。該如何做到呢?補充@Larvata感謝你,你的代碼是能夠釋放原端口的。我發(fā)現(xiàn)是我錯誤的描述了我的問題,補充如下:我在windows上使用nodeJS啟動一個http服務(wù)A。為了防止它掛掉,我啟動了一個后備的http服務(wù)B,服務(wù)B會不斷的嘗試綁定同一個端口。如果http服務(wù)A因為某種原因退出了進程,那么服務(wù)B就會拿到那個端口的控制權(quán),以替代http服務(wù)A。這個過程我可以通過代碼完成。然后我嘗試將這個手動過程寫入代碼。代碼會不斷嘗試綁定9000端口,綁定成功則提供http服務(wù),并且開一新的進程,啟動同一套代碼:不斷嘗試綁定9000端口,綁定成功則代替前一個服務(wù),并且開一個新的進程……也就是進程A會開啟進程B作為備胎,當進程A掛掉以后進程B會轉(zhuǎn)正,并且開啟進程C作為備胎……由于開啟的備胎顯然不能隨主進程掛掉而一起掛掉,所以有兩種開啟方法:1.通過windows的"startnodexxx.js"命令啟動2.通過cp.spawn的detached模式啟動備胎啟動很順利,但是遇到的問題是,進程A掛掉的時候,并沒有將9000端口給釋放,所以進程B一直無法綁定9000端口。端口只有當進程B也掛掉的時候才會被釋放。但是我覺得這是說不通的,端口9000應(yīng)該跟進程A一起釋放才對,這種情況更像是一種portleak。因為實際中無法決定進程A是怎么掛掉的,所以進程A不能主動關(guān)閉端口,所以我之前的問題歸納出現(xiàn)了問題。。。附可執(zhí)行代碼(windowsonly)varexpress=require('express');varhttp=require('http');varapp=express();varcp=require('child_process');varserver=http.createServer(app);server.setTimeout(1000);server.on('error',function(){console.log("Error:",arguments);setTimeout(tryToConnect,3000);});server.on('listening',function(){console.log("Listening");//varchild=cp.spawn('node',['donoting.js'],{//detached:true,//stdio:['ignore','ignore','ignore']//});//child.unref();cp.exec('startnodelisten.js');});vartryToConnect=function(){varport=9000;console.log("Tryingtoconnecttoport",9000);server.listen(9000);};tryToConnect();代碼應(yīng)該達到的效果,應(yīng)該是啟動另一個窗口,然后當你把第一個關(guān)掉以后,新窗口中啟動的程序取代關(guān)掉的程序。
查看完整描述

2 回答

?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

這里標記一下,我也想看看其他人的答案
如果是本機訪問的話,我覺得沒什么辦法的,必定要先killA再重新部署一番
如果是外機訪問的話,倒是可以嘗試一下用Ngnix或Apache做一下端口映射
                            
查看完整回答
反對 回復 2019-04-13
  • 2 回答
  • 0 關(guān)注
  • 696 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號