前言
在多处理器和/或机器上扩展服务器时, 需要为 Server 配置 Presence 选项.
Presence 的作用是允许不同进程之间的通信和数据共享, 特别是用在房间匹配上.
NodeJS
Node.js 是 Javascript 在服务端的运行环境,构建在 chrome 的 V8 引擎之上,基于事件驱动、非阻塞 I/O 模型,充分利用操作系统提供的异步 I/O 进行多任务的执行,适合于 I/O 密集型的应用场景,因为异步,程序无需阻塞等待结果返回,而是基于回调通知的机制,原本同步模式等待的时间,则可以用来处理其它任务.
Node.js 单线程只是一个 js主线程,本质上的异步操作还是由线程池完成的,node 将所有的阻塞操作都交给了内部的线程池去实现,本身只负责不断的往返调度,并没有进行真正的 I/O操作,从而实现异步非阻塞 I/O,这便是node单线程和事件驱动的精髓之处了, 不如说对于高并发的应用, 这样设计才更为合适.
Colyseus
看了上面的介绍就可以知道, Colyseus 的 Node 进程是随便开的. 也就是说, 不管这个进程 (即 Server Node) 开在单核 CPU, 多核 CPU, 不同机器之上, 都可以充分利用 CPU 的计算能力, 与其他 Node 共存. 但是, 这些 Server 如何互相联系形成集群呢? 或者说, 如何随用户规模和硬件投入自由缩放呢? Colyseus 使用内存数据库 Redis 进行 Server Nodes 的管理.
Redis
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。
- redis是基于内存的,内存的读写速度非常快;
- redis是单线程的,省去了很多上下文切换线程的时间;
- redis使用多路复用技术,可以处理并发的连接。非阻塞 I/O 内部实现采用epoll,采用了epoll+自己实现的简单的事件框架。epoll 中的读、写、关闭、连接都转化成了事件,然后利用 epoll 的多路复用特性,绝不在 I/O上浪费一点时间。
Colyseus 使用 Redis 保存连接到它的所有服务器 Nodes, 记录其 ID 与 IP地址 及端口号, 还有每个 Node 有多少种房间, 每种房间都开启了多少个等等, 并以这些数据为依据, 自动执行房间匹配实现负载均衡, 顺便提供多服务器进程间数据共享与订阅/发布等功能. 理论上只要 Redis 的集合里保存得下, 就能使用多少服务器构成集群.
每个 Server 的每个 Room 都可以自由访问 Presence 实例, Redis Presence API 基于 Redis API, 可以在这里找到.
Colyseus Arena
Colyseus Arena 是部署 Colyseus 服务器的最简单解决方案, 让您可以 Get To Fun Faster™
Arena Cloud 是一站式托管解决方案, 可让您专注于多人游戏开发. 它在服务器托管的基础上, 为开发人员提供企业级服务器管理, 基础设施建设, 开发运营和规模扩展等服务. 使用 Arena, 只需在直观的管理仪表板上点击几下, 即可完成 Colyseus 服务器的配置, 管理和更新.
点击这里注册 Arena Cloud 账户.
初级客户免费. 技术支持完善.
Arena Cloud 可以在全球多地使用, 并可应要求提供客户指定区域部署.
RESP.app (RDM) https://download.csdn.net/download/u011720314/82192593
Redis for Linux https://redis.io/download
Redis for Windows https://github.com/tporadowski/redis/releases
Colyseus Arena https://console.colyseus.io/register