成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

nodejs中怎么實現(xiàn)兄弟進(jìn)程通信

今天就跟大家聊聊有關(guān)nodejs中怎么實現(xiàn)兄弟進(jìn)程通信,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

巧家ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

問題

盡管我們可以在主進(jìn)程中保存工作進(jìn)程的實例,但是想通過主進(jìn)程,完成工作進(jìn)程和進(jìn)程A的通信還是非常麻煩,步驟如下 

1 首先主進(jìn)程要監(jiān)聽每個工作進(jìn)程發(fā)過來的任務(wù) 

2 然后把任務(wù)傳給進(jìn)程A 

3 進(jìn)程A處理完后,通知主進(jìn)程,主進(jìn)程再把結(jié)果發(fā)給對任務(wù)對應(yīng)的子進(jìn)程 其中,工作進(jìn)程需要保存任務(wù)對應(yīng)的上下文(比如說回調(diào)),因為工作進(jìn)程可能同時給主進(jìn)程發(fā)送了多個任務(wù),當(dāng)主進(jìn)程通知工作進(jìn)程某個任務(wù)完成的時候,工作進(jìn)程需要通過任務(wù)找到對應(yīng)的上下文,然后進(jìn)行下一步處理,比如執(zhí)行回調(diào)。

解決方案

在主進(jìn)程中開啟一個服務(wù),實現(xiàn)沒有繼承關(guān)系的子進(jìn)程間通信,選取的進(jìn)程間通信方式是unix域,沒有選tcp是因為同主機的進(jìn)程間通信,使用tcp過于重和低效(需要經(jīng)過協(xié)議棧的封包和解包)。子進(jìn)程可以通過該服務(wù)和主進(jìn)程通信,然后主進(jìn)程轉(zhuǎn)發(fā)請求給處理cpu型任務(wù)的子進(jìn)程。結(jié)構(gòu)如下nodejs中怎么實現(xiàn)兄弟進(jìn)程通信在主進(jìn)程而不是進(jìn)程A中開啟unix域服務(wù)是因為以后新增處理其他任務(wù)的子進(jìn)程時,可以復(fù)用該unix域服務(wù),起到api網(wǎng)關(guān)的作用。但是多了一層,會多了一些通信的成本。更直接的可以使用以下結(jié)構(gòu)nodejs中怎么實現(xiàn)兄弟進(jìn)程通信

具體實現(xiàn)

客戶端

const net = require('net');const { EventEmitter } = require('events');
class Work extends EventEmitter {}
class UnixDomainClient extends EventEmitter {  constructor(options) {    super();    this.options = options;  }  send(data) {    const work = new Work();    const socket = net.connect(this.options.path);    socket.end(JSON.stringify(data));    socket.on('error', (e) => {      work.emit('error', e);    });    let res = null;    socket.on('data', (chunk) => {      res = res ? Buffer.concat([res, chunk]) : chunk;    });    socket.on('end', () => {      work.emit('message', res && res.toString());    });    return work;  }}const work = new UnixDomainClient({path: '/tmp/test.sock'}).send('hello');work.on('message', function(res) {  console.log(res);})

服務(wù)器

const fs = require('fs');const net = require('net');const constants = {  UNIX_PATH: '/tmp/test.sock',}if (fs.existsSync(constants.UNIX_PATH)) {  fs.unlinkSync(constants.UNIX_PATH);}const server = net.createServer({ allowHalfOpen: true }, (client) => {  let data = null;  client.on('data', (chunk) => {    data = data ? Buffer.concat([data, chunk]) : chunk;  });  client.on('end', () => {    console.log(`recive msg: ${data.toString()}`)    client.end('world');  });});server.listen(constants.UNIX_PATH, () => {  console.log(`bind uinx path ${constants.UNIX_PATH}`);});server.on('error', (error) => {  console.log(`unix domain server error ${error.toString()}`);});process.on('exit', () => {  if (fs.existsSync(constants.UNIX_PATH)) {    fs.unlinkSync(constants.UNIX_PATH);  }});

看完上述內(nèi)容,你們對nodejs中怎么實現(xiàn)兄弟進(jìn)程通信有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)頁題目:nodejs中怎么實現(xiàn)兄弟進(jìn)程通信
本文地址:http://jinyejixie.com/article30/ijjgpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、ChatGPT全網(wǎng)營銷推廣、網(wǎng)站排名虛擬主機、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)
静乐县| 洪江市| 抚顺县| 胶南市| 越西县| 永春县| 昌都县| 清苑县| 那曲县| 平乡县| 讷河市| 大余县| 台东县| 舞钢市| 岳阳县| 新郑市| 汝城县| 溆浦县| 鄂州市| 福清市| 青冈县| 杭锦后旗| 工布江达县| 铁岭市| 海南省| 高密市| 奉贤区| 绍兴市| 镇康县| 霞浦县| 玛曲县| 葫芦岛市| 临夏市| 那曲县| 平阳县| 绥江县| 双鸭山市| 乐东| 广灵县| 余庆县| 洛隆县|