Skip to content

服务器 API » 优雅关闭

Colyseus 默认提供了一套完善的系统关闭机制. 即系统进程正式终止之前先执行这些操作:

  • 异步断开所有已连接的客户端 (Room#onLeave)
  • 异步销毁所有已创建的房间 (Room#onDispose)
  • 在正式终止进程 Server#onShutdown 之前异步调用回调函数

如果要在 onLeave / onDispose 函数中执行异步程序, 就应该先返回一个 Promise, 并在程序执行完时 resolve 掉. 对于 onShutdown(callback) 函数来说, 也是如此.

返回 Promise

通过返回 Promise, 服务器将等待它们完成, 然后才终止进程.

import { Room } from "colyseus";

class MyRoom extends Room {
    onLeave (client) {
        return new Promise((resolve, reject) => {
            doDatabaseOperation((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            });
        });
    }

    onDispose () {
        return new Promise((resolve, reject) => {
            doDatabaseOperation((err, data) => {
                if (err) {
                    reject(err);
                } else {
                    resolve(data);
                }
            });
        });
    }
}

使用 async

async 关键字让函数隐式返回 Promise. 更多详情请见 Async / Await.

import { Room } from "colyseus";

class MyRoom extends Room {
    async onLeave (client) {
        await doDatabaseOperation(client);
    }

    async onDispose () {
        await removeRoomFromDatabase();
    }
}

进程终止前回调

还可以通过设置 onShutdown 回调来监听进程终止.

import { Server } from "colyseus";

let server = new Server();

server.onShutdown(function () {
    console.log("master process is being shut down!");
});

Back to top