博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket.io+redis+nodejs+nginx集群部署
阅读量:6708 次
发布时间:2019-06-25

本文共 3446 字,大约阅读时间需要 11 分钟。

nginx配置

worker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    #gzip  on;    upstream backend {             ip_hash;             server 127.0.0.1:3000;             server 127.0.0.1:3002;         }    server {        listen       80;        server_name  localhost;    # 匹配到/static/路径 匹配到public目录下的static        location /static/ {            root public/;        }    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://backend;        proxy_redirect off;    }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}

redis.js

// redisvar ioRedis = require('ioredis');// redis充当sub用来订阅redis通道var redis = new ioRedis();//  注意是不同的redis实例//  用来发布消息var pub = new ioRedis();exports.redis = redis;exports.pub = pub;

warn.js

var socketio = require('socket.io');var adapter = require('socket.io-redis');var warn;// 当前连接用户,偷懒了,应该放到redis里共享global.user = [];var num = 0;var redis = require('../redis/redis.js').redis;var pub = require('../redis/redis.js').pub;var hgk = adapter({ pubClient: pub, subClient: redis, key: 'hgk@2017', withChannelMultiplexing: true });// 未封装的用法// redis.subscribe('hgk', function(err, count) {//   console.log('channel count:' + count);// })global.io;exports.listen = function(server) {  io = socketio(server);  io.adapter(hgk);  warn = io.of('/warnTips');  warn.on('connection', function(socket) {    // 添加redis.on message事件,每增加一个socket就增加一个回掉函数(未封装用法)    // redis.on('message', function(channel, message) {    //     console.log('Receive message %s from channel %s', message, channel);    //     socket.emit('warn', 'message')    //   })    user.push({account:num,socketID:socket.id});    num+=1;    socket.on('account', function(data) {      console.log('save account:' + data + 'socketId:'+socket.id);    })    socket.on('hgk', function(data) {      console.log(data);      warn.emit('warn', data);    })    warn.adapter.remoteJoin(socket.id, 'room1', function(err) {      if (err) { console.log('unknown id') }      console.log('join success:' + socket.id);    });    warn.adapter.customHook = function(data, cb) {      warn.emit('warn', data);      cb('hello ' + data);    }    socket.on('disconnect',function(){        for (var i = user.length - 1; i >= 0; i--) {          if(user[i].socketID === socket.id){            var dis = user.splice(i,1);            console.log('del:'+dis);          }        }        console.log('断开链接');    })  });}

app.js

// websocket全网告示快捷入口app.use('/warn', function(req, res, next) {  var time = req.body.time;  var message = req.body.message;  var msg = {      time,      message    }    // pub.publish('hgk','aaaaaaa1');    // res.end('hello world')  io.of('/warnTips').adapter.customRequest(JSON.srtringify(msg), function(err, replies) {    console.log(replies); // an array ['hello john', ...] with one element per node  });  io.of('/warnTips').adapter.clients(function (error, clients) {    if (error) throw error;    console.log(clients); // => [Anw2LatarvGVVXEIAAAD]    res.end('hello world! clients in room1:' + clients.length +'-------'+JSON.stringify(user));  });})

完整项目请参考

转载地址:http://wnblo.baihongyu.com/

你可能感兴趣的文章
Android中Context详解 ---- 你所不知道的Context
查看>>
中国计算机学会推荐国际学术会议和期刊目录
查看>>
3.pandas-电影数据分析
查看>>
让Lispbox 中的 slime 交互开发环境支持中文文件(load 和 compile 带...
查看>>
页面元素用JS动态添加的有效事件绑定方式
查看>>
Java 异常2
查看>>
美国学生吐槽 - 我学的是计算机科学,不是英语。还是找不到工作
查看>>
浅谈Java两种并发类型——计算密集型与IO密集型
查看>>
Hibernate – Fetching Strategies Examples
查看>>
iOS文件管理
查看>>
使用 Eclipse Memory Analyzer 进行堆转储文件分析
查看>>
!JS实战之随机像素图
查看>>
iOS 使用Autolayout实现cell的高度自适应
查看>>
iOS有几种动画,各自是什么?
查看>>
linux下解压命令大全
查看>>
wordpress功能集成(五):无插件实现头像缓存
查看>>
MySQL order by 字符串的排序问题
查看>>
win32gui ======= EnableMenuItem之百度解释
查看>>
jquery 全反选插件
查看>>
SpringMVC+Mybatis框架搭建
查看>>