本文并不讨论如何连接数据库, 如果你需要了解Colyseus如何连接数据库, 请参考这篇文章.

Redis是一款内存数据库, 它的作用不仅仅是数据持久化, 实际上Colyseus引入Redis的初衷是使用Redis的数据共享功能, 以便进行多CPU/服务器的服务扩展.
Colyseus的基础是NodeJS, 而NodeJS是单处理器单线程的程序. 也就是说, 一个CPU只支持运行一个NodeJS虚拟机. 这在多核/多CPU/多服务器的环境下会造成闲置资源浪费.
0_1629878358296_f23d6169-1b27-469a-a939-d47c9f2318df-image.png

既然一个CPU能运行一个NodeJS, 那么多个CPU不就可以运行多个NodeJS了吗? 的确是这样, 但是这样做的话就造成了对于游戏服务器来说无法容忍的问题--多个服务器程序之间互相隔离, 无法进行信息交流.
0_1629879075497_17616526-b005-468a-ad5d-c5abdcfea357-image.png

为了解决这个问题, Colyseus使用了Redis的消息共享机制.
简单来说, Redis的数据共享可以让Colyseus在实现负载均衡的基础上, 还能彼此通信.
0_1629880001452_ebaa4d90-e7ef-4ab8-8235-32977f4e7442-image.png

Colyseus的负载均衡主要体现在Room的分配上. 借助Redis作为桥梁, 在多CPU/服务器的环境下就可以轻松实现服务扩展了.
在创建Colyseus服务器的时候, 有一个参数叫做presence, 默认值为LocalPresence, 即独立服务器, 不使用Redis作为数据共享.
当把这个参数设置为RedisPresence时, 即使用Redis作为多个实例的数据共享, 便于服务扩展, 负载均衡.

import { Server, RedisPresence } from "colyseus";

// This happens on the slave processes.
const gameServer = new Server({
    // ...
    presence: new RedisPresence()
});

gameServer.listen(2567);

具体的相关API, 详见官方文档.