<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • nodejs中怎么實現(xiàn)兄弟進程通信

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

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

            問題

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

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

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

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

            解決方案

            在主進程中開啟一個服務(wù),實現(xiàn)沒有繼承關(guān)系的子進程間通信,選取的進程間通信方式是unix域,沒有選tcp是因為同主機的進程間通信,使用tcp過于重和低效(需要經(jīng)過協(xié)議棧的封包和解包)。子進程可以通過該服務(wù)和主進程通信,然后主進程轉(zhuǎn)發(fā)請求給處理cpu型任務(wù)的子進程。結(jié)構(gòu)如下nodejs中怎么實現(xiàn)兄弟進程通信在主進程而不是進程A中開啟unix域服務(wù)是因為以后新增處理其他任務(wù)的子進程時,可以復(fù)用該unix域服務(wù),起到api網(wǎng)關(guān)的作用。但是多了一層,會多了一些通信的成本。更直接的可以使用以下結(jié)構(gòu)nodejs中怎么實現(xià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)兄弟進程通信有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

            網(wǎng)頁題目:nodejs中怎么實現(xiàn)兄弟進程通信
            本文地址:http://www.jbt999.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;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            微信小程序開發(fā)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 丝袜脚交一区二区三区 | 精品无码在线 | 亚洲www啪成人一区二区麻豆 | 日日操夜夜操天天操 | 97人人操人人操 |