我使用的是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。
答案 0 :(得分:1)
我在Google Group thread找到了答案。
问题出现是因为我的socket.emit('presence');
客户端有socket.on('connect', function(){});
。
这又称为socket.on('presence', function(){});
服务器端,这就是问题所在。