• Returns: {cluster.Worker} worker 的引用。

    在一个工作进程内,调用此方法会关闭所有的 server,并等待这些 server 的 'close' 事件执行,然后关闭 IPC 管道。

    在主进程内,会给工作进程发送一个内部消息,导致工作进程自身调用 .disconnect()

    会设置 .exitedAfterDisconnect

    当一个 server 关闭后,它将不再接收新的连接,但新连接会被其他正在监听的工作进程接收。 已建立的连接可以正常关闭。 当所有连接都关闭后,通往该工作进程的 IPC 管道将会关闭,允许工作进程优雅地死掉,详见 [server.close()]。

    以上情况只针对服务端连接,工作进程不会自动关闭客户端连接,disconnect 方法在退出前并不会等待客户端连接关闭。

    在工作进程中,也存在 process.disconnect,但它不是这个函数,它是 [disconnect()]。

    因为长时间运行的服务端连接可能阻止工作进程断开连接,可以采用发送消息的方法,让应用采取相应的动作来关闭连接。 也可以通过设置超时,当 'disconnect' 事件在某段时间后仍没有触发时关闭工作进程。

    1. if (cluster.isMaster) {
    2. const worker = cluster.fork();
    3. let timeout;
    4. worker.on('listening', (address) => {
    5. worker.send('shutdown');
    6. worker.disconnect();
    7. timeout = setTimeout(() => {
    8. worker.kill();
    9. }, 2000);
    10. });
    11. worker.on('disconnect', () => {
    12. clearTimeout(timeout);
    13. });
    14. } else if (cluster.isWorker) {
    15. const net = require('net');
    16. const server = net.createServer((socket) => {
    17. // 连接永远不会结束。
    18. });
    19. server.listen(8000);
    20. process.on('message', (msg) => {
    21. if (msg === 'shutdown') {
    22. // 将所有与服务器的连接优雅地关闭。
    23. }
    24. });
    25. }