如何使用Node.js + Socket.io + Redis获取在线用户列表,实时/持久消息?

时间:2015-01-30 06:28:40

标签: node.js redis socket.io

我正在开发一个使用某些第三方工具(Moxtra)进行聊天功能的应用程序, 但它提供了使用api与其他用户聊天的能力,除此之外,我想要以下几个其他功能..

  1. 显示在线用户列表。

  2. 用户可以向其他在线用户发送实时通知(不是聊天)。

  3. 用户可以发送可以是实时的消息,或者如果用户不可用,它会在某处保留, 当他回来时,他应该可以使用msg。

  4. 以前我使用ActiveMQ进行通知和消息,但似乎不是我需要的东西。

    现在我已经开始使用node.js,socket.io和redis开展上述工作了。 我找到了使用以下代码显示在线用户的解决方案

    server.js

    var users = [];
    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    
    http.listen(3000, function(){
      console.log('listening on *:3000');
    });
    
    app.get('/', function (req, res) {
        res.sendfile(__dirname + '/');
    });
    
    io.sockets.on('connection', function (socket) {
    
        socket.on('adduser', function (user) {
            console.log("adding user : " + user.id);
            socket.userId = user.id;
            users.push(user);
            updateClients();
        });
    
        socket.on('disconnect', function () {
            for(var i=0; i<users.length; i++) {
                if(users[i].id == socket.userId) {
                    console.log("disconnecting user :"+socket.userId);
                    //delete users[socket.user];
                    users.splice(i, 1);
                }
            }
            updateClients(); 
        });
    
        function updateClients() {
            //console.log("server.js updateClients() : users="+users);
            io.sockets.emit('update', users);
        }
    
    });
    

    客户端

    var socket = io.connect('http://localhost:3000', {'sync disconnect on unload' : true});
    
        var chatUser = {
            id : user.id,
            fullName : user.firstName + " " + user.lastName,
            imgUrl : user.imgUrl,
            role : user.role
        };
    
        socket.on('connect', function (){
            console.log("user " + chatUser.id + " connected");
            socket.emit('adduser', chatUser);
        });
    
        var chatUserList = [];
    
        socket.on('update', function (chatUsers){
            chatUserList = chatUsers;
            renderChatList(chatUserList);
        });
    

    但没有得到正确的解决方法。

0 个答案:

没有答案