Skip to content

伺服器 API » 優雅關閉

Colyseus 預設提供合理的關閉機製. 將在進程終止之前執行這些操作:

  • 異步斷開所有連線的客戶端 (Room#onLeave)
  • 異步處理所有生成的房間 (Room#onDispose)
  • 在關閉進程之前執行可選的異步回呼 Server#onShutdown

如果在 onLeave / onDispose 時執行異步任務, 您應該返回一個 Promise, 並在任務準備好時完成它. 對於 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 關鍵字將使函數在後臺返回一個 Promise. 閱讀更多有關異步/等待的資訊.

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