Proxy and Service Discovery for Colyseus
Clone, this project and install its dependencies:
git clone https://github.com/colyseus/proxy.git
cd proxy
npm install
Edit the .env
file to meet your needs:
HOST
is your public domain name.PORT
is the port the proxy will be running on.REDIS_URL
is the path to the same Redis instance you're using on Colyseus' processes.
Start the proxy server:
npx ts-node proxy.ts
- Configure
RedisPresence
- Bind each instance of the server on a different port
- Use PM2 to manage Colyseus instances
import { Server, RedisPresence } from "colyseus";
// 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: "redis://127.0.0.1:6379/0"
})
})
gameServer.listen(PORT);
console.log("Listening on", PORT);
It's recommended to use PM2 to manage your server instances. PM2 allows to scale Node.js processes up and down within your server.
npm install -g pm2
Use the following ecosystem.config.js
configuration:
// ecosystem.config.js
const os = require('os');
module.exports = {
apps: [{
port : 8080,
name : "colyseus",
script : "lib/index.js", // your entrypoint file
watch : true, // optional
instances : os.cpus().length,
exec_mode : 'fork', // IMPORTANT: do not use cluster mode.
env: {
DEBUG: "colyseus:errors",
NODE_ENV: "production",
}
}]
}
Now you're ready to start multiple Colyseus proceses.
pm2 start
If you're using TypeScript, compile your project before running
pm2 start
, vianpx tsc
.
You should see the following output, depending on the amount of processes your server have:
[PM2][WARN] Applications colyseus not running, starting...
[PM2] App [colyseus] launched (2 instances)
โโโโโโโโโโโโฌโโโโโฌโโโโโโโฌโโโโโโโโโฌโโโโฌโโโโโโฌโโโโโโโโโโโโ
โ Name โ id โ mode โ status โ โบ โ cpu โ memory โ
โโโโโโโโโโโโผโโโโโผโโโโโโโผโโโโโโโโโผโโโโผโโโโโโผโโโโโโโโโโโโค
โ colyseus โ 0 โ fork โ online โ 0 โ 0% โ 15.4 MB โ
โ colyseus โ 1 โ fork โ online โ 0 โ 0% โ 12.3 MB โ
โโโโโโโโโโโโดโโโโโดโโโโโโโดโโโโโโโโโดโโโโดโโโโโโดโโโโโโโโโโโโ
Use `pm2 show <id|name>` to get more details about an app
Now, run pm2 logs
to check if you don't have any errors.
MIT