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

我正在使用一些第三方工具(Moxtra)具有聊天function的应用程序,但它提供了与其他用户使用api聊天的能力,除此之外,我还需要其他几个function如下:

  1. 显示在线用户列表。

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

  3. 用户可以发送消息,这些消息可以是实时的,或者如果用户不可用,它会被保存在某个地方,而当他回来的消息应该是可用的。

以前我用ActiveMQ来通知和消息,但它似乎不是我需要的东西。

现在我已经开始使用node.js,socket.io和redis来处理以上的事情了。 我来解决scheme显示在线用户使用下面的代码

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); }); 

但是没有得到正确的方式去解决。