我遇到的问题是http请求独立发生或在不同时间作为Web套接字连接发生。我的想法是,当用户连接时,我可以在var allConnectionsMatches = [];
中的同一对中存储会话ID和Web套接字,并在稍后的帖子请求中使用此信息来找出哪个套接字正在调用请求,这样我就可以发出到那个特定的插座。下面的代码显示了我的尝试。我写的内容在某种程度上起作用但它有一些问题,例如当你刷新它有时不再发出消息时,或者当你退出浏览器并再次连接时,socket io没有发出消息。有什么想法吗?
var allConnectionsMatches = [];
var sessionID;
app.get('/', function(req, res, next) {
sessionID = req.session.id;
res.render('index.ejs')
});
function findDuplicates(data, sessionID, socket) {
var isPositive = data.lastIndexOf(sessionID);
if (isPositive === true) {
var socketLocation = allConnectionsMatches.indexOf(sessionID);
socketLocation + 1;
allConnectionsMatches.splice(socketLocation, 1, socket)
} else if(isPositive === -1) {
data.push(sessionID, socket);
} else {
}
}
io.sockets.on('connection', function (socket) {
findDuplicates(allConnectionsMatches, sessionID, socket)
});