【发布时间】:2014-09-23 21:22:53
【问题描述】:
我正在使用 Heroku + RedisToGo + Express 4.0 + socket.io 1.0.6。
我最近刚刚从 0.9 升级到 1.0,现在它工作了一半。我已经从教程中编写了一个应用程序,但我对 socket.io 缺乏理解,所以我退后了一步。我的第一个问题是,现在socket.on('connect') 不断重复发生,即使连接成功也是如此。我的客户端 console.log 一直在继续。这是客户端:
// Connect the user
socket.on('connect', function(){
var currentUserId = '<%= currentUser.id %>';
// Add user to redis
socket.emit('login', { userID: currentUserId});
// Retrieve presence info
socket.emit('presence');
});
// Show Presence
socket.on('presence', function(data) {
var userID = data.user;
var presence = data.presence;
if (presence) {
$('#red-dot-' + userID).css("display", "none");
$('#green-dot-' + userID).css("display", "inline");
// Show the hangout button
$('#hangout-' + userID).show();
$('#hangout-unavail-' + userID).hide();
}
else {
$('#red-dot-' + userID).css("display", "inline");
$('#green-dot-' + userID).css("display", "none");
}
});
和服务器端:
io.sockets.on('connection', function (socket) {
var savedUserID;
socket.on('login', function(data){
var userID = data.userID;
savedUserID = userID;
// add first user
redis.sadd("users", userID);
redis.hmset("users:"+userID, "socketID", socket.id, "userID", userID);
});
socket.on('presence', function(){
// Get the list of online users and show Presence
redis.smembers("users", function(err,results) {
var onlineUsers = results;
for (var i in onlineUsers) {
var userID = redis.hget("users:"+onlineUsers[i],"userID", function(err,reply) {
var userID = reply;
// Emit presence
io.sockets.emit('presence', {
user: userID,
presence: "true"
});
});
}
});
});
如您所见,我正在手动将用户添加到 redis。
【问题讨论】:
标签: node.js heroku express socket.io