Node.Js+Redis+Socket.IO 实现 聊天室或推送消息

基于Redis 推送,向Node.Js 推送消息,Node.Js 把 消息推送給 Socket.IO(可以是WebSocket,也可以是long-Polling,由Socket.IO 封装)

需要 Redis服务端,Node.Js需要 redis模块和Socket.IO模块

Node.Js

var redisPusMsgServer = require('http').createServer().listen(1379);


var redis = require('redis'),
    RDS_PORT = 6379,        //端口号
    RDS_HOST = '172.20.20.46',    //服务器IP
    RDS_OPTS = {};            //设置项
var redisclient = redis.createClient(RDS_PORT,RDS_HOST,RDS_OPTS);//redis客户端
//创建redis 推送监听
var sub = function(x){
var x = "RedisTestChannel";
redisclient.select('15', function(error){
       if(error) {
         console.log(error);
       } else {
         redisclient.subscribe(x,function(e){
    console.log('Subscribe Channel:' + x);
     });
       }
    });
}
//执行redis 推送监听
sub();
//输出日志
console.log('redisPusMsgServer running at http://172.20.20.46:1379/');
//创建websocket服务
var io = require('socket.io')(redisPusMsgServer,{
   "serveClient": false ,
   "transports":['websocket', 'polling'] //这个配置可以 告诉socket.io 优先使用 哪个模式,默认是 polling,websocket
 });
//websocket链接后,redis执行监听推送频道 是有消息
io.on('connection',function(socket){
//redis接收到推送消息后,websocket推送給页面
redisclient.on('message',function(error,msg){
console.log('connection');
        console.log(msg);
//触发websocket 接收信息
        socket.emit('msgReceived', msg);
});
//注册接收Web前端消息事件
    socket.on('SendMsg', function(data) {
        console.log('发送消息',data);
        //socket.broadcast用于向整个网络广播(除自己之外)
        socket.broadcast.emit('GetMsg',data);
    });
//断开websocket事件
    socket.on('disconnect', function(data) {
        console.log('断开',data);
        socket.emit('c_leave','离开');
        //socket.broadcast用于向整个网络广播(除自己之外)
        //socket.broadcast.emit('c_leave','某某人离开了')
    });
});


HTML页面



 
 
 
 
 
 
  socket
 
 
 
 
  
   


   


   
 
 
 



你可能感兴趣的:(Redis,Node.Js,WebSocket)