我試圖保存客戶端中的所有連接對象。但正如我所想,連接的客戶端都具有相同的ID。因此,如果對象connections
具有所有連接的套接字,當我嘗試發送消息至connections['mac']
時,它只會顯示在我發送給我的屏幕上。下面是身份驗證碼:Socket.io爲所有客戶端分配相同的ID
app.post('/auth', function(req, res){ // routes.auth(hash, db, io, pseudoArray, connections)
var username = req.body.username,
password = req.body.password;
if (username != "" && password != ""){
authenticate(username, password, db, hash, function(err, user){
if (user) {
// Regenerate session when signing in
// to prevent fixation
console.log('user authenticated');
req.session.regenerate(function(){
req.session.user = user.name;
req.session.success = 'Authenticated as ' + user.name
+ ' click to <a href="/logout">logout</a>. '
+ ' You may now access <a href="/restricted">/restricted</a>.';
io.sockets.on('connection', function (socket) {
socket.set('pseudo', req.session.user, function(){
pseudoArray.push(req.session.user);
var sessionuser = req.session.user;
socket.emit('pseudoStatus', 'ok');
connections[req.session.user] = socket;
console.log("user " + req.session.user + " connected");
});
});
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true });
res.redirect('home');
});
} else {
console.log('auth failed');
req.session.error = 'Authentication failed, please check your '
+ ' username and password.'
+ ' (use "tj" and "foobar")';
res.redirect('login');
}
});
} else {
res.redirect('connect');
}
});
,我將消息發送給其他客戶端的代碼:
exports.addfriend = function(connections, io){
return function(req, res){
// var collection = db.get('go1');
var username = req.session.user;
var friend = req.body.name;
console.log(connections[''+friend+'']);
connections[''+friend+''].emit('addRequest', username);
return;
}
}
我曾在路由,該授權碼早期版本的文件,我想我應該運行這一關app.js.我做到了這一點,它仍然沒有工作,因爲我想要它。有人能告訴我我錯過了什麼嗎?
c在哪裏發送消息到其中一個連接? – Gaurav
用消息代碼更新了問題 – amit
您可以將此問題簡化爲顯示問題的單個node.js文件和html文件嗎?我認爲現在有太多的缺失部分要完全回答這個問題。這可能與會話更新有關,但很難說。 –