- Returns: {cluster.Worker}
worker的引用。
在一个工作进程内,调用此方法会关闭所有的 server,并等待这些 server 的 'close' 事件执行,然后关闭 IPC 管道。
在主进程内,会给工作进程发送一个内部消息,导致工作进程自身调用 .disconnect()。
会设置 .exitedAfterDisconnect。
当一个 server 关闭后,它将不再接收新的连接,但新连接会被其他正在监听的工作进程接收。
已建立的连接可以正常关闭。
当所有连接都关闭后,通往该工作进程的 IPC 管道将会关闭,允许工作进程优雅地死掉,详见 [server.close()]。
以上情况只针对服务端连接,工作进程不会自动关闭客户端连接,disconnect 方法在退出前并不会等待客户端连接关闭。
在工作进程中,也存在 process.disconnect,但它不是这个函数,它是 [disconnect()]。
因为长时间运行的服务端连接可能阻止工作进程断开连接,可以采用发送消息的方法,让应用采取相应的动作来关闭连接。
也可以通过设置超时,当 'disconnect' 事件在某段时间后仍没有触发时关闭工作进程。
if (cluster.isMaster) {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('net');const server = net.createServer((socket) => {// 连接永远不会结束。});server.listen(8000);process.on('message', (msg) => {if (msg === 'shutdown') {// 将所有与服务器的连接优雅地关闭。}});}
