nodejs+socketio+redis实现前端消息实时推送

寻技术 Redis / JS脚本 2023年07月11日 108

nodejs+socketio+redis实现前端消息实时推送

1. 后端部分 发送redis消息

可以参考此篇实现(直接使用Jedis即可)

http://www.cnblogs.com/binyue/p/4763352.html

2.后端部分: 接收redis消息

var redis;
if(process.argv.length <= 2){
  redis = require('redis').createClient();
}else{
  redis = require('redis').createClient(6379,process.argv[2]);
}
var io = require('socket.io').listen(5678);
var clients = {}
redis.subscribe('console');
redis.on('message', function(channel, data){
  if (channel=="console"){
    args = JSON.parse(data);
    for(var s in clients){
      clients[s].emit('event_' + args.id, args.message);
    }
  }
});
io.on('connection', function(socket){
  var address = socket.request.connection.remoteAddress + ":" + socket.request.connection.remotePort
  console.log(new Date() + ' client connected ['+ socket.id + "] " + address);
  clients[socket.id] = socket;
  socket.on('disconnect', function(){
    console.log("discopnnect " + this.id + "-----" + this.request.connection.remoteAddress + ":" + this.request.connection.remotePort);
    delete clients[socket.id];
  });
  socket.on('event', function(message){

  });
});

package.json

{
  "name" : "real-time",
  "description" : "providing real-time message push for ",
  "version" : "0.0.1",
  "dependencies" : {
    "socket.io" : "1.2.1",
    "redis": "0.7.3",
    "socket.io-client": "1.2.1"
  }
}

前端部分 接收消息并显示

使用了 socket.io-1.0.6

var socket = io.connect(beeper_url);
    socket.on('event_' + event_id,function(data){
      callback(data);
})

1. 后端部分 发送redis消息

可以参考此篇实现(直接使用Jedis即可)

http://www.cnblogs.com/binyue/p/4763352.html

2.后端部分: 接收redis消息

var redis;
if(process.argv.length <= 2){
  redis = require('redis').createClient();
}else{
  redis = require('redis').createClient(6379,process.argv[2]);
}
var io = require('socket.io').listen(5678);
var clients = {}
redis.subscribe('console');
redis.on('message', function(channel, data){
  if (channel=="console"){
    args = JSON.parse(data);
    for(var s in clients){
      clients[s].emit('event_' + args.id, args.message);
    }
  }
});
io.on('connection', function(socket){
  var address = socket.request.connection.remoteAddress + ":" + socket.request.connection.remotePort
  console.log(new Date() + ' client connected ['+ socket.id + "] " + address);
  clients[socket.id] = socket;
  socket.on('disconnect', function(){
    console.log("discopnnect " + this.id + "-----" + this.request.connection.remoteAddress + ":" + this.request.connection.remotePort);
    delete clients[socket.id];
  });
  socket.on('event', function(message){

  });
});

package.json

{
  "name" : "real-time",
  "description" : "providing real-time message push for ",
  "version" : "0.0.1",
  "dependencies" : {
    "socket.io" : "1.2.1",
    "redis": "0.7.3",
    "socket.io-client": "1.2.1"
  }
}

前端部分 接收消息并显示

使用了 socket.io-1.0.6

var socket = io.connect(beeper_url);
    socket.on('event_' + event_id,function(data){
      callback(data);
})
关闭

用微信“扫一扫”