2012-01-12 2 views
1

나는이 같은 코드가있는 경우 :node.js socket.io가 메모리 누수입니까?

io.sockets.on('connection', function (socket) { 
    // setup listeners for this socket   
    setup_socket_events(socket);  
}); 

function setup_socket_events(socket) 
{  
    socket.on('disconnect', function(){event_disconnect(socket);});   
} 

function event_disconnect(socket) 
{ 
    console.log("disconnect"); 
} 

소켓 연결이 끊어을,이 메모리 누수이기 때문에, 왜, 어떻게 당신은 그것을 중지합니까?

UPDATE : 다음 코드 노력 는 assertvarnish

var assertvanish = require('assertvanish'); 
io.sockets.on('connection', function (socket) { 
    // setup listeners for this socket  
    setup_socket_events(socket);  
}); 

function setup_socket_events(socket) 
{ 
    socket.on('disconnect', event_disconnect(socket)); 
} 
function event_disconnect(socket) 
{ 

    return function() { 
    console.log("disconnect"); 
     // do something with socket 
     assertvanish(socket, 5000); 
    } 
} 
+0

특히 메모리 누수에 대해 궁금한가요? –

+0

또한'on' 호출은'io.sockets.on ('connection', setup_socket_events);'일 수 있습니다. 중간 기능은 필요 없습니다. –

+0

setup_socket_events에 socket을 전달해야합니까? 내가 메모리 누수가 걱정되는 주된 이유는 내가 어딘가에 가지고 있고 가능한 한이 코드를 간소화했다는 것입니다. assertvanish (socket, 10000) 사용하기; in event_disconnect 주기적 메모리 누수가 나타납니다. – crickeys

답변

0

에는 메모리 누출이 없다에서 환상 주장을 생성한다. 당신은 assertvanish를 사용하고 있다고 말하고 있습니다. 제 생각에 assertvanish(socket, 10000)은 10 초 후에 소켓이 삭제되지 않는다고 말합니다. 소켓을 영원히 계속 유지하기를 원하기 때문입니다.

+0

왜? 'setup_socket_events'와'event_disconnect'를 다른 곳에서 재사용하는 것을 불가능하게하는 것 이외에 가능한 다른 점은 무엇입니까? OP는 클로저를 사용하지 않으므로 아무런 이득이 없습니다. 그러나 OP 코드에는 함수에 이름이 있고 (도구가 도움이 됨) 재사용이 가능하다는 장점이 있습니다. –

+0

당신은 재사용에 대해 옳았 습니다만, setup_socket_events 및 event_disconnect 함수를 재사용 할 수있는 곳을 보지 못했습니다 ... 여러 소켓을 열고 모두 동일한 이벤트를 가지며 연결 해제시 동일한 동작을 원할 경우 ? 그것보다 2 초 만에 이해할 수 있기 때문에 코드를 두 번째 형식으로 작성 하겠지만 함수 호출로 어떤 일이 일어나는지 20 초가 걸렸습니다. , 나는 생각한다. –

+1

setup_socket_events를 사용했는데 실제로는 함수가 훨씬 더 많은 일을하기 때문에이 예제에서는 단순화했습니다. 대규모 프로젝트에서 모든 익명 함수 호출을하는 것이 더 어려워졌습니다. 더 많은 통찰력을 얻으려면 새로운 대답을 참조하십시오. – crickeys