我正在开发一个使用某些第三方工具(Moxtra)进行聊天功能的应用程序, 但它提供了使用api与其他用户聊天的能力,除此之外,我想要以下几个其他功能..
显示在线用户列表。
用户可以向其他在线用户发送实时通知(不是聊天)。
用户可以发送可以是实时的消息,或者如果用户不可用,它会在某处保留, 当他回来时,他应该可以使用msg。
以前我使用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);
});
但没有得到正确的解决方法。