<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[代理 集群 服务发现 多核 堆 扩展]]></title><description><![CDATA[<p><strong>代理 集群 服务发现 多核 堆 扩展, 这些是相关联的一类意思.</strong></p>
<p>服务器扩展的目的是尽量压榨服务器的计算能力.<br />
服务器扩展包括垂直扩展和水平扩展.</p>
<p><strong>垂直扩展</strong><br />
可以简单地理解为提升单机服务器的性能. 包括硬件方面: 升级设备, 软件方面: 启用某些技术手段.</p>
<p><strong>水平扩展</strong><br />
可以简单地理解为增加服务器数量已满足更多的用户需求.</p>
<p>一个好的服务器系统应该能提供垂直扩展和水平扩展两项技能, 提供最佳的服务器伸缩能力, 满足各种规模的软件需求.</p>
<h2>Colyseus</h2>
<p>如果你缺乏后台开发经验或者在开发多人在线游戏时遇到麻烦, 那么开源服务器 Colyseus 及其技术团队将成为你的救星. Colyseus 是一款易用, 好用的多人在线游戏服务器, 这一点已被诸多 HTML5 和手机游戏证明.</p>
<h2>Proxy</h2>
<p><img src="/assets/uploads/files/1661949805195-2df713c7-e9ef-4d14-995b-83726bf830f6-image.png" alt="0_1661949801213_2df713c7-e9ef-4d14-995b-83726bf830f6-image.png" class="img-responsive img-markdown" /></p>
<p>Proxy 被称做<strong>代理</strong>, 它作为一个主入口, 通过查询 Redis 里存储的 Presence, 选择合适的 服务器进程进行连接.<br />
通过查表找到合适的服务器的过程, 叫做<strong>服务发现</strong>.<br />
上图蓝色方块代表服务器进程, 即 Colyseus Server, 可以是异地不同的实体计算机, 也可以是一个CPU上的不同内核上面运行的不同进程.<br />
一个CPU上创建多进程多服务器, 这样的应用叫<strong>多核</strong>应用; 多个不同地域, 不同性能的服务器组合为一个应用所使用, 这样的应用服务叫做<strong>堆</strong>.<br />
方块里面可想而知就是该服务器所创建和管理的Room了.</p>
<h2>Colyseus Arena</h2>
<p>部署 Colyseus 服务器的最简单解决方案, 让您可以 <strong>Get To Fun Faster™</strong></p>
<p>Arena Cloud 是一站式托管解决方案, 可让您专注于多人游戏开发. 它在服务器托管的基础上, 为开发人员提供企业级服务器管理, 基础设施建设, 开发运营和规模扩展等服务. 使用 Arena, 只需在直观的管理仪表板上点击几下, 即可完成 Colyseus 服务器的配置, 管理和更新.</p>
<p><strong><a href="https://console.colyseus.io/register" rel="nofollow">点击这里注册</a> Arena Cloud 账户</strong></p>
<p></p>
<h4>Arena Cloud 服务器部署地区</h4>
<p>可以在全球多地使用 Arena Cloud, 并可应要求提供客户指定区域部署.</p>
<ul>
<li>北弗吉尼亚州 (美国 - 东部 1)</li>
<li>俄亥俄州 (美国 - 东部 2)</li>
<li>北弗吉尼亚州 (美国 - 东部 3 | 可免费试用)</li>
<li>北加利福尼亚州 (美国 - 西部 1)</li>
<li>孟买 (亚太地区 - 南部 | 可免费试用)</li>
<li>爱尔兰 (欧洲 - 西部)</li>
<li>法兰克福 (欧洲 - 中部 | 可免费试用)</li>
<li>首尔 (亚太地区 - 东北部)</li>
<li><em>圣保罗 (南美 - 东部) -- 根据客户要求提供</em></li>
</ul>
<h2>运行代理</h2>
<p>首先全局安装 Proxy:</p>
<pre><code>npm install -g @colyseus/proxy
</code></pre>
<p>配置两个环境变量:</p>
<ul>
<li><code>PORT</code> 代理监听的端口号.</li>
<li><code>REDIS_URL</code> Redis 的路径, Proxy 用它来查表, Colyseus 向它报告自己的 Presence.</li>
</ul>
<p>运行:</p>
<pre><code>colyseus-proxy
</code></pre>
<h2>Proxy + Colyseus + PM2 组合</h2>
<ul>
<li>安装 <code>@colyseus/proxy</code> (<code>npm install --save @colyseus/proxy</code>)</li>
<li>配置 <code>RedisPresence</code></li>
<li>配置 <code>MongooseDriver</code></li>
<li>为每个服务器配置不同的端口号</li>
<li>使用 PM2 管理 Colyseus 和 Proxy 的运行</li>
</ul>
<p>服务器配置代码:</p>
<pre><code>import { Server, RedisPresence } from &quot;colyseus&quot;;
import { MongooseDriver } from &quot;colyseus/lib/matchmaker/drivers/MongooseDriver&quot;

// binds each instance of the server on a different port.
const PORT = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE);

const gameServer = new Server({
    presence: new RedisPresence({
        url: &quot;redis://127.0.0.1:6379/0&quot;
    }),
    driver: new MongooseDriver(),
})

gameServer.listen(PORT);
console.log(&quot;Listening on&quot;, PORT);
</code></pre>
<p>推荐使用 PM2 管理服务器进程. PM2 可以自动缩放 Node.js 进程 (包括Colyseus和Proxy) 数量.</p>
<pre><code>npm install -g pm2
</code></pre>
<p>PM2 配置文件 <code>ecosystem.config.js</code>:</p>
<pre><code>// ecosystem.config.js
const os = require('os');
module.exports = {
    apps: [
         {
            port        : 80,
            name        : &quot;colyseus-proxy&quot;,
            script      : &quot;./node_modules/@colyseus/proxy/bin/proxy&quot;,
            instances   : 1, // 可以放大进程数量
            exec_mode   : 'cluster',
            env: {
                PORT: 80,
                REDIS_URL: &quot;redis://127.0.0.1:6379/0&quot;
            }
        },
        {
            port        : 8080,
            name        : &quot;colyseus&quot;,
            script      : &quot;lib/index.js&quot;, // 入口点文件
            watch       : true,           // 可选参数
            instances   : os.cpus().length,
            exec_mode   : 'fork',         // 这里不要使用堆模式.
            env: {
                DEBUG: &quot;colyseus:errors&quot;,
                NODE_ENV: &quot;production&quot;,
            }
        }
    ]
}
</code></pre>
<p>下面就是启动程序了.</p>
<pre><code>pm2 start
</code></pre>
<blockquote>
<p>如果服务代码使用 TypeScript, 要在 <code>pm2 start</code> 启动前,<br />
使用 <code>npx tsc</code> 编译为 JS 文件.</p>
</blockquote>
<p>输出信息如下:</p>
<pre><code>[PM2][WARN] Applications colyseus not running, starting...
[PM2] App [colyseus] launched (2 instances)
┌──────────┬────┬─────────┬────────┬───┬─────┬───────────┐
│ Name     │ id │ mode    │ status │ ↺ │ cpu │ memory    │
├──────────┼────┼─────────┼────────┼───┼─────┼───────────┤
│ proxy    │ 0  │ cluster │ online │ 0 │ 0%  │ 7.4 MB    │
│ colyseus │ 1  │ fork    │ online │ 0 │ 0%  │ 15.4 MB   │
│ colyseus │ 2  │ fork    │ online │ 0 │ 0%  │ 12.3 MB   │
└──────────┴────┴─────────┴────────┴───┴─────┴───────────┘
使用 `pm2 show &lt;id|name&gt;` 查看应用详情
</code></pre>
<p>使用 <code>pm2 logs</code> 查看日志.</p>
]]></description><link>http://discuss.colyseus.io/topic/637/代理-集群-服务发现-多核-堆-扩展</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 23:57:34 GMT</lastBuildDate><atom:link href="http://discuss.colyseus.io/topic/637.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 19 May 2022 10:56:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 代理 集群 服务发现 多核 堆 扩展 on Wed, 31 Aug 2022 13:49:48 GMT]]></title><description><![CDATA[<p><strong>代理 集群 服务发现 多核 堆 扩展, 这些是相关联的一类意思.</strong></p>
<p>服务器扩展的目的是尽量压榨服务器的计算能力.<br />
服务器扩展包括垂直扩展和水平扩展.</p>
<p><strong>垂直扩展</strong><br />
可以简单地理解为提升单机服务器的性能. 包括硬件方面: 升级设备, 软件方面: 启用某些技术手段.</p>
<p><strong>水平扩展</strong><br />
可以简单地理解为增加服务器数量已满足更多的用户需求.</p>
<p>一个好的服务器系统应该能提供垂直扩展和水平扩展两项技能, 提供最佳的服务器伸缩能力, 满足各种规模的软件需求.</p>
<h2>Colyseus</h2>
<p>如果你缺乏后台开发经验或者在开发多人在线游戏时遇到麻烦, 那么开源服务器 Colyseus 及其技术团队将成为你的救星. Colyseus 是一款易用, 好用的多人在线游戏服务器, 这一点已被诸多 HTML5 和手机游戏证明.</p>
<h2>Proxy</h2>
<p><img src="/assets/uploads/files/1661949805195-2df713c7-e9ef-4d14-995b-83726bf830f6-image.png" alt="0_1661949801213_2df713c7-e9ef-4d14-995b-83726bf830f6-image.png" class="img-responsive img-markdown" /></p>
<p>Proxy 被称做<strong>代理</strong>, 它作为一个主入口, 通过查询 Redis 里存储的 Presence, 选择合适的 服务器进程进行连接.<br />
通过查表找到合适的服务器的过程, 叫做<strong>服务发现</strong>.<br />
上图蓝色方块代表服务器进程, 即 Colyseus Server, 可以是异地不同的实体计算机, 也可以是一个CPU上的不同内核上面运行的不同进程.<br />
一个CPU上创建多进程多服务器, 这样的应用叫<strong>多核</strong>应用; 多个不同地域, 不同性能的服务器组合为一个应用所使用, 这样的应用服务叫做<strong>堆</strong>.<br />
方块里面可想而知就是该服务器所创建和管理的Room了.</p>
<h2>Colyseus Arena</h2>
<p>部署 Colyseus 服务器的最简单解决方案, 让您可以 <strong>Get To Fun Faster™</strong></p>
<p>Arena Cloud 是一站式托管解决方案, 可让您专注于多人游戏开发. 它在服务器托管的基础上, 为开发人员提供企业级服务器管理, 基础设施建设, 开发运营和规模扩展等服务. 使用 Arena, 只需在直观的管理仪表板上点击几下, 即可完成 Colyseus 服务器的配置, 管理和更新.</p>
<p><strong><a href="https://console.colyseus.io/register" rel="nofollow">点击这里注册</a> Arena Cloud 账户</strong></p>
<p></p>
<h4>Arena Cloud 服务器部署地区</h4>
<p>可以在全球多地使用 Arena Cloud, 并可应要求提供客户指定区域部署.</p>
<ul>
<li>北弗吉尼亚州 (美国 - 东部 1)</li>
<li>俄亥俄州 (美国 - 东部 2)</li>
<li>北弗吉尼亚州 (美国 - 东部 3 | 可免费试用)</li>
<li>北加利福尼亚州 (美国 - 西部 1)</li>
<li>孟买 (亚太地区 - 南部 | 可免费试用)</li>
<li>爱尔兰 (欧洲 - 西部)</li>
<li>法兰克福 (欧洲 - 中部 | 可免费试用)</li>
<li>首尔 (亚太地区 - 东北部)</li>
<li><em>圣保罗 (南美 - 东部) -- 根据客户要求提供</em></li>
</ul>
<h2>运行代理</h2>
<p>首先全局安装 Proxy:</p>
<pre><code>npm install -g @colyseus/proxy
</code></pre>
<p>配置两个环境变量:</p>
<ul>
<li><code>PORT</code> 代理监听的端口号.</li>
<li><code>REDIS_URL</code> Redis 的路径, Proxy 用它来查表, Colyseus 向它报告自己的 Presence.</li>
</ul>
<p>运行:</p>
<pre><code>colyseus-proxy
</code></pre>
<h2>Proxy + Colyseus + PM2 组合</h2>
<ul>
<li>安装 <code>@colyseus/proxy</code> (<code>npm install --save @colyseus/proxy</code>)</li>
<li>配置 <code>RedisPresence</code></li>
<li>配置 <code>MongooseDriver</code></li>
<li>为每个服务器配置不同的端口号</li>
<li>使用 PM2 管理 Colyseus 和 Proxy 的运行</li>
</ul>
<p>服务器配置代码:</p>
<pre><code>import { Server, RedisPresence } from &quot;colyseus&quot;;
import { MongooseDriver } from &quot;colyseus/lib/matchmaker/drivers/MongooseDriver&quot;

// binds each instance of the server on a different port.
const PORT = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE);

const gameServer = new Server({
    presence: new RedisPresence({
        url: &quot;redis://127.0.0.1:6379/0&quot;
    }),
    driver: new MongooseDriver(),
})

gameServer.listen(PORT);
console.log(&quot;Listening on&quot;, PORT);
</code></pre>
<p>推荐使用 PM2 管理服务器进程. PM2 可以自动缩放 Node.js 进程 (包括Colyseus和Proxy) 数量.</p>
<pre><code>npm install -g pm2
</code></pre>
<p>PM2 配置文件 <code>ecosystem.config.js</code>:</p>
<pre><code>// ecosystem.config.js
const os = require('os');
module.exports = {
    apps: [
         {
            port        : 80,
            name        : &quot;colyseus-proxy&quot;,
            script      : &quot;./node_modules/@colyseus/proxy/bin/proxy&quot;,
            instances   : 1, // 可以放大进程数量
            exec_mode   : 'cluster',
            env: {
                PORT: 80,
                REDIS_URL: &quot;redis://127.0.0.1:6379/0&quot;
            }
        },
        {
            port        : 8080,
            name        : &quot;colyseus&quot;,
            script      : &quot;lib/index.js&quot;, // 入口点文件
            watch       : true,           // 可选参数
            instances   : os.cpus().length,
            exec_mode   : 'fork',         // 这里不要使用堆模式.
            env: {
                DEBUG: &quot;colyseus:errors&quot;,
                NODE_ENV: &quot;production&quot;,
            }
        }
    ]
}
</code></pre>
<p>下面就是启动程序了.</p>
<pre><code>pm2 start
</code></pre>
<blockquote>
<p>如果服务代码使用 TypeScript, 要在 <code>pm2 start</code> 启动前,<br />
使用 <code>npx tsc</code> 编译为 JS 文件.</p>
</blockquote>
<p>输出信息如下:</p>
<pre><code>[PM2][WARN] Applications colyseus not running, starting...
[PM2] App [colyseus] launched (2 instances)
┌──────────┬────┬─────────┬────────┬───┬─────┬───────────┐
│ Name     │ id │ mode    │ status │ ↺ │ cpu │ memory    │
├──────────┼────┼─────────┼────────┼───┼─────┼───────────┤
│ proxy    │ 0  │ cluster │ online │ 0 │ 0%  │ 7.4 MB    │
│ colyseus │ 1  │ fork    │ online │ 0 │ 0%  │ 15.4 MB   │
│ colyseus │ 2  │ fork    │ online │ 0 │ 0%  │ 12.3 MB   │
└──────────┴────┴─────────┴────────┴───┴─────┴───────────┘
使用 `pm2 show &lt;id|name&gt;` 查看应用详情
</code></pre>
<p>使用 <code>pm2 logs</code> 查看日志.</p>
]]></description><link>http://discuss.colyseus.io/post/1878</link><guid isPermaLink="true">http://discuss.colyseus.io/post/1878</guid><dc:creator><![CDATA[COCO]]></dc:creator><pubDate>Wed, 31 Aug 2022 13:49:48 GMT</pubDate></item></channel></rss>