Yang03 / blog

0 stars 0 forks source link

socket.io using multiple nodes #11

Open Yang03 opened 7 years ago

Yang03 commented 7 years ago

问题:

在一台服务器上启动多个node的时候,造成socket.io不可用

解决方案

使用pm2,开启多个进程,和 nginx 的upstream io_node

首先看下nginx 的配置

upstream io_nodes {
     ip_hash;
     server 127.0.0.1:8080;
     server 127.0.0.1:8081;
     server 127.0.0.1:8082;
     server 127.0.0.1:8083;
     server 127.0.0.1:8084;
 }
server {
     listen      80;
     server_name abc.xx.cn;
     access_log  logs/host.access.log  main;
     error_log logs/error.log warn;
      location / {
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           proxy_set_header Host $host;
           proxy_http_version 1.1;
           proxy_pass http://io_nodes;
        }
        gzip on;
        gzip_comp_level 4;
        gzip_types    text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
        gzip_vary off;
        gzip_disable "MSIE [1-6]";
        gzip_min_length 66;
}

pm2.json 的配置

{
  "name": "feb-web",
  "script": "index.js",
  "exec_mode": "fork",
  "instances": 5,
  "env": {
       "NODE_ENV" :'production'
   }
}
var instanceId = process.env.NODE_APP_INSTANCE || 0 //这个pm2 会当成参数传递进来
let port = 8080 + parseInt(instanceId, 10)
server.listen(port, function() {
    console.log('listen' + port)
});

前端代码

var io = socket.io('http://abc.xx.com') //nginx 的server