2016-07-12 3 views
0

저는 Node.js와 Socket.io로 작은 채팅 응용 프로그램을 쓰고 있습니다. 모든 라이브 연결에 대한 참조를 유지하는 객체 인 connections이 있습니다 (예 : (의사) :Node.js의 동시 수정에 대해 걱정할 필요가 있습니까?

for (var i=0; i<connections.length; i++) { 
    // do something with connections[i] // (3) 
} 

질문 : 내가 연결 개체를 반복 코드, 예를 들면의 다른 부분에서 이제

var connections = {}; 
... 
io.on("connection", function(socket)){ 
    connections[socket.id] = socket;  // (1) 

    socket.on("disconnect", function(){ 
    delete connections[socket.id];  // (2) 
    }); 
} 

소켓의 disconnect 이벤트 항목을 삭제 될 위험이 있는가 (2)connections 객체에서 루프가 실행 중일 때 (3) 오류가 발생합니까? 그렇다면 모범 사례는 무엇입니까?

루프를 완료 한 후에 만 ​​삭제할 수 있으며 제거해야하지만 필요합니까? 감사!

+1

아니요, JavaScript는 단일 스레드입니다. 루프가 실행 중이면 다른 코드를 실행할 수 없습니다. – Paulpro

답변

2

필요없는 노드는 코드를 단일 스레드로 실행합니다. 반복하는 동안 수행하는 연산이 동기식이면 socket.io 콜백은 인터리브되지 않습니다.

3

위험은 없습니다.

JS 프로세스는 단일 스레드이며 루프가 완료 될 때까지 콜백을 트리거하지 않습니다.

관련 문제