0
如何找到與我的會話連接的套接字?我在我的node.js服務器端js的「授權」事件中獲得了會話。現在我想在我的「註銷」請求中斷開套接字,但它對我不起作用。這是我的代碼。與節點的套接字斷開連接
var express = require('express'),
redis = require('redis'),
RedisStore = require('connect-redis')(express),
store = new RedisStore({ host: '127.0.0.1', port: 6379 }),
parseCookie = express.cookieParser(secretkey);
var app = express();
var server = require("http").createServer(app),
io = require("socket.io").listen(server, { log: false }),
app.use(express.cookieParser());
app.use(express.session({ secret: secretkey, key: 'express.sid', store: store, cookie: { maxAge: 3600000 } }));
app.use(express.methodOverride());
io.set('authorization', function (handshakeData, callback) {
if (handshakeData.headers.cookie) {
parseCookie(handshakeData, null, function(err) {
handshakeData.sessionID = handshakeData.signedCookies['express.sid'];
//or if you don't have signed cookies
//handshakeData.sessionID = handshakeData.cookies['express.sid'];
console.log('manish in parseCookie 2 ' + handshakeData.sessionID + ', ' + ioClient);
store.get(handshakeData.sessionID, function (err, session) {
console.log('getting result ' + err + ', ' + session);
if (err || !session) {
// if we cannot grab a session, turn down the connection
callback('Session not found.', false);
} else {
//console.log('getting connection ' + session);
// save the session data and accept the connection
handshakeData.session = session;
callback(null, true);
}
});
});
} else {
return callback('No cookie transmitted.', false);
}
//callback(null, true);
});
io.sockets.on('connection', function(socket) {
console.log('A socket with sessionID ' + socket.handshake.sessionID + ' connected!');
socket.on('disconnect', function() {
console.log('socket.on.disconnect ' + socket.handshake.sessionID);
});
socket.on('error', function(err) {
if(err === 'handshake error') {
console.log('handshake error', err);
} else {
console.log('io error', err);
}
});
socket.on('message', function(data) {
console.log('messege received on server is "' + data + '"');
});
});
現在當用戶單擊註銷時,我想斷開與此方法的套接字;
app.post('/logout', function (req, res) {
try {
//here is my database logic
//And here I want to disconnect socket,
io.sockets.socket(req.session.id).disconnect();
}
catch (err) { nodeUtil.errorLog2(res, 'trycatch', 6, err, 'app.js', 'logout'); }
});
這不會觸發任何錯誤,也不會進入socket.on(「斷開連接」)事件。那麼我該怎麼做?
嘗試使用socket.disconnect(真); –
@Momary,仍然無法正常工作。 –