2011-12-23 1 views
1

나는 socket.io와 node.js를 배우기 시작했다. 나는 꽤 기본적인 것들을 시도하고있다. (또는 그렇게 생각한다.) 그러나 나는 할 수 없다.socket.io + node.js에있는 현재 활성 소켓을 유지하는 방법은 무엇입니까?

그때 연결된 클라이언트를 저장하고 싶은
var app = require('http').createServer(handler) 
    , io = require('socket.io').listen(app) 
    , fs = require('fs') 

app.listen(8080); 
var clients = []; 

function handler (req, res) { 
    fs.readFile(__dirname + '/index.html', 
    function (err, data) { 
     if (err) { 
      res.writeHead(500); 
      return res.end('Error loading index.html'); 
     } 
     res.writeHead(200); 
     res.end(data); 
    }); 
} 
io.sockets.on('connection', function (socket) { 
    clients[socket.id] = true; 
    socket.broadcast.emit('conection', { id: clients}); 
}); 

, 즉, OnConnection 그들에게 연결된 모든 클라이언트를 보내

여기 내 노드 응용 프로그램입니다. 요점은, 내가 올바르게 clients.push(socket.id) 기능을 사용하기 때문에 자바 스크립트에서 배열을 올바르게 사용하는 방법을 모르겠지만, popsocket.id 클라이언트가 배열을 통해 반복하지 않고 연결을 끊으면 그럴 수 없습니다.

현재 열려있는 소켓을 가져 오는 방법이 있더라도 현재 소켓 세션에서 다른 용도로 사용하지 않기 때문에이 방법으로이 작업을 수행하려고합니다.

나는, 그렇게 정말 멍청한 놈 질문하시기 바랍니다 알고는 처음처럼

답변

7

당신은 배열의 소켓 ID를 놓아야합니다 :) 나와 함께 곰과 분리에의 socket.id을 제거 연결이 끊긴 클라이언트. 배열을 철저하게 반복하여 요소을 삭제할 필요가 없으면 array.indexOf (요소)를 사용하여 요소의 위치를 ​​결정하고 array.splice (위치, 1)를 사용하여 해당 요소를 삭제할 수 있습니다.

function deleteFromArray(my_array, element) { 
    position = my_array.indexOf(element); 
    my_array.splice(position, 1); 
} 

io.sockets.on('connection', function (socket) { 
    clients.push(socket.id); 
    socket.broadcast.emit('conection', { id: clients}); 
    socket.on('disconnect', function() { 
    deleteFromArray(clients, socket.id); 
    }); 
}); 

자료 : 그것을 밖으로 작동하고 @alessioalex

Deleting array elements in JavaScript - delete vs splice

+0

당신에게 대단히 감사합니다 그리고 당신이 또한 허용 대답을 upvote에 수있는 방법으로, 도움 : –

+0

다행 뭔가 새로운 것을 배웠다. – alessioalex