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