1.先说各组件版本
node:v7.8.0
pm2:2.6.1
nginx version: nginx/1.10.2
"socket.io": "^2.0.3",
"express": "^4.15.4"
2.修改bin/www,设置4个端口号
var port = normalizePort(process.env.PORT || '58686');
if(process.env.NODE_APP_INSTANCE)
{
port = port + parseInt(process.env.NODE_APP_INSTANCE);
}
app.set('port', port);
如果PM2 开启了四个cluster ,那么node就开启了四个进程
如我的centos 服务器显示的 PID 和 PPID 如下
18848 2901
18854 2901
18870 2901
18871 2901
端口号为 58686,58687,58688,58689。顺序跟进程ID不一定一致
3.配置nginx ip_hash
upstream io_nodes {
ip_hash;
server 127.0.0.1:58686;
server 127.0.0.1:58687;
server 127.0.0.1:58688;
server 127.0.0.1:58689;
}
server{
listen 80;
server_name 这里是域名;
location /{
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://io_nodes;
}
}
4.socket.io Client 端例子
<script type="application/javascript" src="socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect('http://progress.iotchain.io');
socket.on('data', function (data) {
reMea(data);
});
</script>
5.socket.io Server 端例子
var server = http.createServer(app);
var io = require('socket.io')(server);
io.sockets.on('connection', function (socket) {
socket.emit('data', db.read());
socket.on('update',function (data) {
db.write(data,function () {
io.sockets.emit('data', db.read());
});
})
});