使用 PM2 集群 Express/Socket.io 服务器
使用PM2来运行你的服务器守护程序的一个好处是它有内置的负载均衡,可以通过 -i 来轻松启用
如果你不熟悉的话负载均衡是什么的话,简单来说就是将服务器负载发送到集群中运行的应用程序的不同实例的过程
这使你能够更好地利用多核心的CPU,将传入的请求以一种平衡的方式发送到每个实例
不过当你要运行一个像websocket这样的有状态的连接时,配置起来会稍微又些麻烦
socket.io需要利用redis这样的快速的键值存储来保持跨服务器实例的连接
安装socket.io-redis适配器(adapter)
yarn add socket.io-redis
修改服务端代码
const sockets = require('socket.io') const redis = require('socket.io-redis') const bindListeners = (io) => { io.on('connection', (socket) => { console.log(`${socket.id} connected`) }) } module.exports = (server) => { const io = sockets(server, { transports: [ 'websocket', 'polling' ] }) // Add the redis adapter io.adapter(redis({ host: 'localhost', port: 6379 })) bindListeners(io) }
客户端
const socket = io.connnect({ transports: [ 'websocket', 'polling' ] })
接下来,运行服务即可
pm2 start server -i max