2014-04-30 2 views
0

데이터베이스에서 실시간 업데이트를 받으려면 socket.io에서 사용하고 있습니다. 여기 내 코드입니다 :소켓 io를 사용하여 업데이트를 얻으려면

var q = "SELECT * FROM notifications"; 
db.query(q, function(err, rows, fields) { 
    if(rows[0]) { 
    io.sockets.emit('newNotifications', rows[0]); 
    } 
}); 

의 작업,하지만 난 WHERE userid = "+myuserid+" 이 어떻게 할 수있는 질문을 추가 할? 나는이 코드로 이것을 시도했다 :

socket.on('connect', function() { 
socket.send({"myuserid":"1"}); 
console.log('connected'); 
}); 

감사합니다.

답변

0

기본적으로 특정 사용자 소켓을 특정 소켓에 연결해야합니다. 어떻게하는지는 authentication을 어떻게 처리하는지에 달려 있습니다.

소켓에 사용자 ID가 연결되면 개별 알림을 받기위한 몇 가지 옵션이 있습니다. 가장 직접적인 것은 위에서 원하는대로 할 수있는 것입니다. 결과를 제한하는 조건으로 쿼리를 만듭니다. 소켓별로이 작업을 수행해야하므로 다음과 같은 것이 필요할 것이다. 그들이 분리하면

data.watchForNotification = function(userId, fn) { 
    // Please sanitize this and make sure you're not vulnerable to sql injection attacks 
    var q = "SELECT ... WHERE UserId = " + userId; 
    data.watchedUsers[userId] = setInterval(function() { 
    db.query(q, function(err, rows, fields) { 
     if(rows.[0]) { 
     fn(rows[0]); 
     } 
    }); 
    }, 10000); 
} 

data.stopWatching(userId) { 
    if(data.watchedUsers[userId]) { 
    clearInterval(data.watchedUsers[userId]); 
    delete data.watchedUsers[userId]; 
    } 
} 

io.on('connection', function(socket) { 
    // authenticate and set socket.userId 

    data.watchForNotifications(socket.userId, function(notification) { 
    socket.emit('notification', notification); 
    }); 

    socket.on('disconnect', function() { 
    data.stopWatching(socket.userId); 
    }); 
}); 

이 뜻을 설정 새로운 알림 10 초마다 확인하고 그들이 와서 연결된 소켓에 사람들을 보내드립니다 간격. 또한 해당 사용자의 데이터베이스 쿼리를 중지합니다. 여기에는 의사 코드와 추상화 작업이 많이 있지만, 어디를 가고 싶은지를 알려면 충분합니다.

+0

도움을 주셔서 감사하지만 사용자 ID var이 정의 된 방법은 무엇입니까? 그리고 어떤 socket.send가 필요합니까? – user3059048

+0

userid를 얻는 방법은 코드와 검색 방법에 달려 있습니다. 나는 당신이 사용자에 대해 어떤 종류의 인증을하고 있다고 가정하고있다. 일반적으로 사용자를 인증 할 때 검색하는 데이터 조각 중 하나입니다. 원래 예제에서 보여주는 것처럼 클라이언트에서 해당 사용자 ID를 단순히 전달할 수 없거나 연결된 사용자가 다른 사용자의 사용자 ID를 전달하여 알림을받을 수있는 취약점에 직접 노출 될 수 있습니다. –

+0

socket.emit 코드는 연결된 소켓에 알림을 보냅니다. 이 경우 쿼리 및 사용자 ID가 연결된 소켓입니다. –

관련 문제