當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js Worker.disconnect()用法及代碼示例


worker.disconnect()

曆史
版本變化
v7.3.0

此方法現在返回對 worker 的引用。

v0.7.7

添加於:v0.7.7


參數

在worker中,該函數將關閉所有服務器,等待這些服務器上的'close'事件,然後斷開IPC通道。

在主節點中,一條內部消息被發送到工作線程,導致它自己調用.disconnect()

導致設置.exitedAfterDisconnect

服務器關閉後,它將不再接受新的連接,但任何其他偵聽工作人員都可以接受連接。現有的連接將被允許照常關閉。當不再存在連接時,請參閱 server.close() ,通往工作人員的 IPC 通道將關閉,允許其正常終止。

以上僅適用於服務端連接,客戶端連接不會被worker自動關閉,disconnect也不會等他們關閉後再退出。

在worker中,存在process.disconnect,但不是這個函數;它是 disconnect()

因為長期存在的服務器連接可能會阻止工作人員斷開連接,所以發送消息可能很有用,因此可以采取特定於應用程序的操作來關閉它們。如果在一段時間後沒有發出 'disconnect' 事件,則實現超時、殺死工作人員也可能很有用。

if (cluster.isPrimary) {
  const worker = cluster.fork();
  let timeout;

  worker.on('listening', (address) => {
    worker.send('shutdown');
    worker.disconnect();
    timeout = setTimeout(() => {
      worker.kill();
    }, 2000);
  });

  worker.on('disconnect', () => {
    clearTimeout(timeout);
  });

} else if (cluster.isWorker) {
  const net = require('node:net');
  const server = net.createServer((socket) => {
    // Connections never end
  });

  server.listen(8000);

  process.on('message', (msg) => {
    if (msg === 'shutdown') {
      // Initiate graceful close of any connections to server
    }
  });
}

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 Worker.disconnect()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。