2012-02-08 1 views
1

io.sockets.clients()에 관한 문서를 찾는 시간이 지났으므로 ID, 사용자 이름 등 연결된 클라이언트를 검색 할 수 있습니다. alert(io.sockets.clients().length.toString()); 정확한 번호를 알려주지 만 필요합니다. 배열의 구조를 찾습니다. 구조를 모른 채 배열을 알아낼 수있는 방법이 있습니까? php의 코드는 print_r()과 비슷합니까? 지금까지Socket.IO 연결된 클라이언트 목록

코드 :

socket.on('switchRoom', function(newroom){ 
    var clients = io.sockets.clients(); 
    socket.emit('users', clients); 
}); 

socket.on('users', function(usernames) { 
    for(var client in usernames) { 
     console.log(usernames[client].id + ' disconnected: ' +  usernames[client].disconnected) 
    } 
}); 

나는

/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81 
data = JSON.stringify(ev); 
      ^
TypeError: Converting circular structure to JSON 
at Object.stringify (native) 
at Object.encodePacket (/home/ed/socket/chat/node_modules/socket.io/lib/parser.js:81:19) 
at Socket.packet (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:202:21) 
at Socket.emit (/home/ed/socket/chat/node_modules/socket.io/lib/socket.js:351:15) 
at Socket.<anonymous> (/home/ed/socket/chat/app.js:58:10) 
at Socket.$emit (events.js:64:17) 
at SocketNamespace.handlePacket (/home/ed/socket/chat/node_modules/socket.io/lib/namespace.js:331:20) 
at Manager.onClientMessage (/home/ed/socket/chat/node_modules/socket.io/lib/manager.js:436:38) 
at WebSocket.onMessage (/home/ed/socket/chat/node_modules/socket.io/lib/transport.js:387:20) 
at Parser.<anonymous> (/home/ed/socket/chat/node_modules/socket.io/lib/transports/websocket/hybi-07-12.js:38:10) 

답변

2

당신이 (브라우저에서) 클라이언트 측에서이 일을하고 있습니까 해고 또는 서버 측에 'switchRoom'후이 오류가 ? 당신은 alert을 사용하여 언급하지만, 나는 당신이 원하는대로 클라이언트 측에서 clients() 메쏘드를 알지 못합니다. 서버 측

clients() Socket S as defined by this method 배열 반환 DEV 도구

/** 
* Retrieves all clients as Socket instances as an array. 
* 
* @api public 
*/ 

SocketNamespace.prototype.clients = function (room) { 
    var room = this.name + (room !== undefined ? 
    '/' + room : ''); 

    if (!this.manager.rooms[room]) { 
    return []; 
    } 

    return this.manager.rooms[room].map(function (id) { 
    return this.socket(id); 
    }, this); 
}; 

Node.js를 콘솔 브라우저 디버깅 있도록 console 객체를 제공하는 단계; 일반적으로 console.log(something)으로 전화 할 수 있습니다. something 꽤 많은 부분이 있습니다. 오브젝트의 경우, 오브젝트의 세부 사항이 한 가지 또는 다른 방법으로 열거됩니다.

[편집]

이미 아마 당신은이 같은 시도 할 수 있습니다, 사용자 이름을 저장하는 socket.set를 사용하고 있기 때문에 : 내가 깊이에 더 보여 내 현재 코드를 추가 한

// server 

socket.on('connection', function(socket) { 
    ... 
    socket.on('disconnect', function() { 
    socket.get('username', function (err, name) { 
     socket.broadcast.emit('disconnected', name); 
    }); 
    }); 
    ... 
}); 

// client 

socket.on('connect', function() { 
    ... 
    socket.on('disconnected', function(name) { 
    console.log(name + " disconnected."); 
    }); 
    ... 
}); 
+0

무엇 이 일어나고있다. 이 작업은 서버 (app.js)에서 수행되며 아무 것도 콘솔에 푸시되지 않습니다. –

+0

첫 번째 부분은 서버에 있고 두 번째 부분은 클라이언트에 있다고 가정합니다. 'io.sockets.clients()'는'Socket' 객체들의 배열을 반환합니다; 인터넷을 통해 클라이언트로 보낼 수 없습니다. 사용자 이름 데이터를 가져 와서 문자열 배열 등을 전송해야합니다. 'socket.set'을 사용하여 사용자 이름을 설정하고 있습니까? 그렇지 않다면 어떻게 추적하고 있습니까? –

+0

'socket.set ('username', 'MyName')'과'socket.set ('id', socket.id)'는 set 변수를 가져올 수있는 방법이며,'.emit'을 고객? –