2011-12-23 11 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)の機能を使用するので、JavaScriptで配列を正しく使用する方法がわかりませんが、popsocket.idにアクセスできなくなります。

現在開いているソケットを取得するメソッドがあっても、私は現在のソケットセッションではなく他のものと一緒にアプリケーションを使用しないので、このようにしたいと思います。

私はそれがとても本当にnoobの質問です、私と一緒に負担してください知っている:)

答えて

7

あなたはあなたが初めて行ったように、アレイ内のソケットIDを入れ、切断上のsocket.idを削除する必要があります切断されたクライアント。 要素を削除するために配列全体をループする必要はありません.Array.indexOf(要素)を使用して要素の位置を決定し、array.splice(position、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); 
    }); 
}); 

資源:

Deleting array elements in JavaScript - delete vs splice

+0

それが出て働いていると私はあなたにも受け入れ答えをupvoteことができる方法によって、助けるために喜んで何か新しいもの:) –

+0

を学んだ@alessioalexありがとうございました。 – alessioalex

関連する問題