av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問(wèn)

瀏覽:170日期:2023-09-12 08:09:26

問(wèn)題描述

先看一個(gè)一個(gè)應(yīng)用程序,通過(guò)net服務(wù)觸發(fā) http服務(wù);

const http = require(’http’);const net = require(’net’);let netServer = net.createServer();let httpServer = http.createServer((req, res)=>{ res.end(’ok’);})netServer.listen(3000,function(){ console.log('222222'); //netServer.close();})netServer.on(’connection’,(socket)=>{ httpServer.emit(’connection’,socket);})

簡(jiǎn)單來(lái)說(shuō)就是 初始化兩個(gè)服務(wù) 一個(gè)net服務(wù) 一個(gè)http服務(wù),用net服務(wù)監(jiān)聽(tīng)端口,客戶端連接后,觸發(fā)http服務(wù)的連接事件,并將socket傳給http服務(wù);里面有一行注釋,如果關(guān)閉注釋,服務(wù)就關(guān)閉了;但是再看另一個(gè)應(yīng)用,這里涉及到了子進(jìn)程模塊,還有進(jìn)程間的句柄傳遞;看程序;

父進(jìn)程文件:

var cp = require(’child_process’);var net = require(’net’);var child1 = cp.fork(’./c.js’);var child2 = cp.fork(’./c.js’);var netServer = net.createServer();netServer.listen(3000,function(){ child1.send(’server’, netServer); child2.send(’server’, netServer); console.log('222222'); netServer.close();})

子進(jìn)程文件:

const http = require(’http’);let httpServer = http.createServer((req, res)=>{ // res.writeHead(200,{’Content-Type’:’text/plain’ + ’n’}); res.end(’ok’);})process.on(’message’, function(m, tcp){ console.log(m); tcp.on(’connection’, function(socket){httpServer.emit(’connection’,socket); })})

大家看父進(jìn)程文件里也有一行注釋,但是這里的注釋去掉后,服務(wù)能正常工作,這是什么原因呢?父進(jìn)程的net服務(wù)已經(jīng)關(guān)閉了,已經(jīng)不監(jiān)聽(tīng)3000端口了,想不明不白在代碼層面理解 父進(jìn)程結(jié)束了,但是子進(jìn)程沒(méi)有結(jié)束,但是請(qǐng)求的流是怎么運(yùn)行的呢,或者說(shuō)這個(gè)代碼是怎么運(yùn)行的,思緒有點(diǎn)亂啊,node深入淺出,讀起來(lái)還真是有點(diǎn)費(fèi)勁啊

問(wèn)題解答

回答1:

google了一下,在stackoverflow上找到一個(gè)類似的問(wèn)題

關(guān)鍵應(yīng)該在這一段上handleConversion在send時(shí)有handle參數(shù)的情況下,會(huì)調(diào)用handleConversion[type]可以看到在type:'net.Server'時(shí),send的是server._handle而接收時(shí)是這樣的

got: function(message, handle, emit) { var self = this; var server = new net.Server(); server.listen(handle, function() {emit(server); });}

也就是說(shuō)父進(jìn)程send了server._handle而子進(jìn)程則使用這個(gè)handle重建了一個(gè)server所以實(shí)際上子進(jìn)程中的server已經(jīng)跟父進(jìn)程中的不是同一個(gè)了,父進(jìn)程的server.close自然不會(huì)對(duì)子進(jìn)程產(chǎn)生影響

stackoverflow上的問(wèn)題可以看這里

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: h片免费观看 | 日韩欧美大片 | 国产精品va| 国产精品麻豆免费版 | 99福利视频| 天堂成人av| 日韩免费一区二区 | 婷婷丁香激情 | 日本在线小视频 | 真实的国产乱xxxx在线 | 香蕉视频一区二区 | 久久免费小视频 | 一区二区精品 | 久久精品1| 青青草视频污 | 亚洲成人av在线 | 精品毛片一区二区三区 | 天天插夜夜操 | 国产一及片| 不卡的av网站 | 久久综合久色欧美综合狠狠 | 青草国产 | 91丨porny丨成人蝌蚪 | 欧美不卡一区二区三区 | 91精品视频在线 | 亚洲欧美视频在线 | 黄色免费一级片 | 精品一区二区国产 | 久久免费国产视频 | 国产不卡视频 | 国产精品大全 | 一区二区精品视频 | 久久香蕉国产 | 欧美人与性动交α欧美精品 | 日韩一区二区三区在线 | 精品久久久久久久久久久 | 中文一区二区 | 五月天激情视频 | 黄色成人免费网站 | 天天爽天天干 | 综合久久综合 |