나는'm 하려고 목록을 표시하려면 클라이언트의 특정 객실. 나는 그냥 보여주고 싶은 자신의 이름,그리고 그들의 소켓 id 입니다.
이 곳이'm:
socket.set('nickname', "Earl");
socket.join('chatroom1');
console.log('User joined chat room 1);
var roster = io.sockets.clients('chatroom1');
for ( i in roster )
{
console.log('Username: ' + roster[i]);
}
Haven't 어떤 행운을 얻기 위 목록 소켓 Id 또는 아무것도. 고 싶은 그것을 반환 별명이 그러나입니다.
를 사용하는 사람들을 위해 소켓에.IO 버전 1.0 또는 더 중대한 위 답 작동하지 않을 수 있습니다. 참조하시기 바랍 다음과 같은 대답입니다. 의 목록을 얻을 모든 클라이언트에서는 특정 객실
코드를 업데이트 소켓 개체에 대한 모든 클라이언트에룸
var clients = io.sockets.adapter.rooms['Room Name'].sockets;
//to get the number of clients
var numClients = (typeof clients !== 'undefined') ? Object.keys(clients).length : 0;
for (var clientId in clients ) {
//this is the socket of each client in the room.
var clientSocket = io.sockets.connected[clientId];
//you can do whatever you need with this
clientSocket.emit('new event', "Updates");
}
그냥 몇 가지입니다.
이 있을 때에는소켓
를 설정할 수 있습 같은 속성:socket.nickname='얼';
을 사용하여 나중에 저장 시설에서 예를 들어 콘솔 로그:
콘솔입니다.로그(socket.닉네임);
너는 누락에 닫는 견적(')에서 당신의:
콘솔입니다.로그('사용자에 합류했 채팅룸 1);
아래는 개정 코드가 도움이 될 것입니다 이 비트도 알고있는 반복 사용하고 아래는 비동기와 이 효과가 있습니다 당신이 어떻게 처리하는 데이터 전송합니다.
socket.nickname = 'Earl';
socket.join('chatroom1');
console.log('User joined chat room 1');
var roster = io.sockets.clients('chatroom1');
roster.forEach(function(client) {
console.log('Username: ' + client.nickname);
});
하는 데 도움 당신은 더 많은 것이 필요하시 코드로 필요하지 않습니다 context.
모든 답변을 위고는 하나 여기서소켓에.io 객실 어떤 소켓에서 현재기 https://stackoverflow.com/questions/6563885/socket-io-how-do-i-get-a-list-of-connected-sockets-clients 었거나 잘못된 또는 불완전한 사용할 경우 2.0.
소켓 수 있습니다.어댑터.객실
io.소켓이 있습니다.어댑터.객실
io.소켓이 있습니다.어댑터.sid;//the socket.id 배열
/socket.어댑터.객실:/
{"/cs#v561bgPlss6ELZIZAAAB":{"sockets":{"/cs#v561bgPlss6ELZIZAAAB":true},"length":1},"방 xxx":{"sockets":{"/cs#v561bgPlss6ELZIZAAAB":true},"길이":1}}
/io.소켓이 있습니다.어댑터.객실:sid 없이는 네임스페이스/
{"v561bgPlss6ELZIZAAAB":{"sockets":{"v561bgPlss6ELZIZAAAB":true},"length":1}}
참고:기본실은 이것입니다:"각각의 소켓에서 Socket.IO 가에 의해 확인 무작위 unguessable,독특한 식별자 Socket#id 입니다. 귀하의 편의를 위해,각각의 소켓에 자동으로 결합 방을 식별하여 이 id."
I 리뷰를 지속적으로 획득한 메모리 어댑터 지금까지,시도하지 않 redis-합니다.
을 위한 Socket.io 보다 큰 v1.0 고 노드 v6.0+다음과 같은 코드를 사용:
function getSockets(room) { // will return all sockets with room name
return Object.entries(io.sockets.adapter.rooms[room] === undefined ?
{} : io.sockets.adapter.rooms[room].sockets )
.filter(([id, status]) => status) // get only status = true sockets
.map(([id]) => io.sockets.connected[id])
}
당신이 원하는 경우를 방출하는 무언가가 그들에게 이것을 사용:
getSockets('room name').forEach(socket => socket.emit('event name', data))
로그인이 모든 소켓 객실에서 콘솔,당신은 당신이 원하는대로 할 수 없다 그들과 함께...
const socketsInRoom = io.adapter.rooms[room_name];
/*Collect all participants in room*/
for(let participant in socketsInRoom){
for(let socketId in socketsInRoom[participant]){
console.log(socketId)
}
}
을 만들 수 있습 배열체는 사용자의 컬렉션
var users = {};
그런 다음 서버 측에서 추가할 수 있습니다 그것은 새로운 사용자에 연결할 때
socket.on('new-user', function (username) {
users[username] = username;
});
를 표시하는 동안 사용할 수 있습 루"사용자"체
클라이언트 측에서
var socket = io.connect();
socket.on('connect', function () {
socket.emit('new-user', 'username');
});