Socket.IO-연결된 소켓 / 클라이언트 목록은 어떻게 얻습니까?


159

현재 연결된 모든 소켓 / 클라이언트 목록을 얻으려고합니다.

io.sockets 불행히도 배열을 반환하지 않습니다.

배열을 사용하여 내 목록을 유지할 수는 있지만 이것이 두 가지 이유로 최적의 솔루션이라고 생각하지 않습니다.

  1. 여분. Socket.IO는 이미이 목록의 사본을 유지합니다.

  2. Socket.IO는 클라이언트 (예 :)에 대한 임의의 필드 값을 설정하는 방법을 제공 socket.set('nickname', 'superman')하므로 내 자신의 목록을 유지하려면 이러한 변경 사항을 따라야합니다.

도움?


io.socket을 배열로 변환 할 수 없습니까?
mak

2
0.7.6에서 io.sockets.sockets는 간단한 해시 객체 id => socket입니다
mak

1
나는 그것을 알아 차 렸지만 이상한 행동을하고있다 (표준 소켓 객체처럼 보이지 않음). 예를 들어 pastebin.com/fxuzVckS를 시도했지만 소켓 객체에 'get'메서드가 포함되어 있지 않습니다.
Andy Hin

3
socketid io.sockets.sockets[socket]는 소켓입니다.
mak

2
첫 번째 주장은 err메모리 저장소를 사용하는 경우 항상 null입니다. .get('nickname', function(err, nickname) { ... })
mak

답변:


173

Socket.IO 0.7에서는 clients네임 스페이스에 대한 메소드가 있으며 연결된 모든 소켓의 배열을 반환합니다.

네임 스페이스가없는 API :

var clients = io.sockets.clients();
var clients = io.sockets.clients('room'); // all users from room `room`

네임 스페이스

var clients = io.of('/chat').clients();
var clients = io.of('/chat').clients('room'); // all users from room `room`

이것이 미래의 누군가를 돕기를 바랍니다.

참고 : 이 솔루션 은 1.0 이전 버전 에서만 작동합니다


업데이트 2020 년 3 월 6 일

1.x 이상에서이 링크를 참조하십시오 : socket.io의 대화방에 몇 명의 사람이 있는지 확인


3
나는 그들이 1.0에서 클라이언트 메소드를 삭제했다고 생각합니다 ... 지금 당장 확인하십시오 ...
marksyzm

7
그들은 완전히 다시 작성하기 때문에 거의 모든 것을 1.0으로 떨어 뜨 렸습니다. 그러나 1.0은 몇 년 동안 발표되지 않았습니다. 1.0에서는 connected네임 스페이스 의 개체 를 사용해야합니다 .
3rdEden

6
@ 3rdEden, 연결된 네임 스페이스의 객체를 사용하는 구문은 무엇입니까? var clients = io.sockets.connected();분명히 작동하지 않습니다. 감사합니다
Kaya Toast


TypeError : fn.bind는 함수가 아닙니다
Iman Marashi

101

Socket.io 1.4

Object.keys(io.sockets.sockets); 연결된 모든 소켓을 제공합니다.

Socket.io 1.0 socket.io 1.0부터 실제 허용되는 답변은 더 이상 유효하지 않습니다. 그래서 임시 수정으로 사용하는 작은 기능을 만들었습니다.

function findClientsSocket(roomId, namespace) {
    var res = []
    // the default namespace is "/"
    , ns = io.of(namespace ||"/");

    if (ns) {
        for (var id in ns.connected) {
            if(roomId) {
                var index = ns.connected[id].rooms.indexOf(roomId);
                if(index !== -1) {
                    res.push(ns.connected[id]);
                }
            } else {
                res.push(ns.connected[id]);
            }
        }
    }
    return res;
}

네임 스페이스없는 API 가됩니다.

// var clients = io.sockets.clients();
// becomes : 
var clients = findClientsSocket();

// var clients = io.sockets.clients('room');
// all users from room `room`
// becomes
var clients = findClientsSocket('room');

네임 스페이스에 대한 API 는 다음과 같습니다.

// var clients = io.of('/chat').clients();
// becomes
var clients = findClientsSocket(null, '/chat');

// var clients = io.of('/chat').clients('room');
// all users from room `room`
// becomes
var clients = findClientsSocket('room', '/chat');

또한이 관련 질문을 참조하십시오 . 여기서 주어진 방의 소켓을 반환하는 함수를 제공합니다.

function findClientsSocketByRoomId(roomId) {
var res = []
, room = io.sockets.adapter.rooms[roomId];
if (room) {
    for (var id in room) {
    res.push(io.sockets.adapter.nsp.connected[id]);
    }
}
return res;
}

Socket.io 0.7

네임 스페이스없는 API :

var clients = io.sockets.clients();
var clients = io.sockets.clients('room'); // all users from room `room`

대한 네임 스페이스

var clients = io.of('/chat').clients();
var clients = io.of('/chat').clients('room'); // all users from room `room`

참고 : socket.io API가 깨지기 쉽고 일부 솔루션은 구현 세부 사항에 의존하기 때문에 클라이언트를 직접 추적해야 할 수도 있습니다.

var clients = [];

io.sockets.on('connect', function(client) {
    clients.push(client); 

    client.on('disconnect', function() {
        clients.splice(clients.indexOf(client), 1);
    });
});

3
감사합니다. 그들이이 기능을 꺼낸 것에 놀랐습니다.
Tyler Scott

1
@TylerScott 저도 특히 마이그레이션 가이드에서 다루지 않는 점을 감안할 때 특히 중요합니다. socket.io/docs/migrating-from-0-9
nha

@ nha, 이것은 작동하지 않지만 소켓 배열 대신 0, 1 및 2 등과 같은 정수 배열을 반환합니다. 어떤 아이디어?
ThePixelPony

다중 노드는 어떻습니까? Redis 스토어에서 여러 노드를 사용하기 때문에
John Nguyen

3
@ nha 대답은 정확하지만 redis store 서버가있는 여러 노드에서는 작동하지 않습니다. 1 노드 프로세스에서 ns.connected [id]를 사용하여 소켓 연결 여부를 확인할 수 없습니다
John Nguyen

46

socket.io 1.0 이후에는 사용할 수 없습니다

io.sockets.clients(); 
or
io.sockets.clients('room'); 

더 이상 대신 다음을 사용할 수 있습니다

var clients_in_the_room = io.sockets.adapter.rooms[roomId]; 
for (var clientId in clients_in_the_room ) {
  console.log('client: %s', clientId); //Seeing is believing 
  var client_socket = io.sockets.connected[clientId];//Do whatever you want with this
}

3
나는 다음으로 변경합니다 :var clients_in_the_room = io.sockets.adapter.rooms[roomId].sockets
Fábio Zangirolami

37

Socket.IO 1.x 사용 :

연결된 클라이언트의 배열을 가져옵니다.

io.engine === io.eio // => true
Object.keys(io.engine.clients) // => [ 'US8AxrUrrDF_G7ZUAAAA', 'Ov2Ca24Olkhf2NHbAAAB' ]
Object.keys(io.eio.clients)    // => [ 'US8AxrUrrDF_G7ZUAAAA', 'Ov2Ca24Olkhf2NHbAAAB' ]

연결된 클라이언트 수를 확보하십시오.

io.engine.clientsCount // => 2
io.eio.clientsCount    // => 2

32

socket.io 1.3에서 매우 간단합니다.

io.sockets.sockets-연결된 소켓 객체를 포함하는 배열입니다. 각 소켓에 사용자 이름을 저장 한 경우 다음을 수행 할 수 있습니다.

io.sockets.sockets.map(function(e) {
    return e.username;
})

팔. 연결된 모든 사용자의 이름이 있습니다.


2
감사! 단순화를 위해 +1 이 방법과 Joseph Dykstra의 답변 사이에 차이점이 있는지 알고 있습니까? (Object.keys(io.engine.clients)
cyclingLinguist

4
v1.4.5에서는 작동하지 않습니다. 여전히 솔루션 개발 중
Nuno Furtado

그것을 찾았습니까? \
ocram

2
TypeError : io.sockets.sockets.map는 함수가 아닙니다
Király István

23

나는 오늘이 고통을 겪었다. Socket.io는 API에 대한 적절한 문서를 만들 수 있으면 훨씬 더 좋습니다.

어쨌든, 나는 io.sockets를 살펴 보았고 우리가 사용할 수있는 많은 옵션을 발견했습니다.

io.sockets.connected //Return {socket_1_id: {}, socket_2_id: {}} . This is the most convenient one, since you can just refer to io.sockets.connected[id] then do common things like emit()
io.sockets.sockets //Returns [{socket_1}, {socket_2}, ....]. Can refer to socket_i.id to distinguish
io.sockets.adapter.sids //Return {socket_1_id: {}, socket_2_id: {}} . Looks similar to the first one but the object is not actually the socket, just the information.

// Not directly helps but still relevant
io.sockets.adapter.rooms //Returns {room_1_id: {}, room_2_id: {}}
io.sockets.server.eio.clients //Return client sockets
io.sockets.server.eio.clientsCount //Return number of connected clients

또한 네임 스페이스와 함께 socket.io를 사용하는 경우 io.sockets가 객체 대신 배열이되므로 위의 메소드가 중단됩니다. 해결하려면 io.sockets를 io로 바꾸십시오 (예 : io.sockets.connected는 io.connected, io.sockets.adapter.rooms는 io.adapter.rooms ...)

socket.io 1.3.5에서 테스트


1
@ Зелёный 네임 스페이스를 사용하지 않으면 작동합니다. 네임 스페이스를 사용하는 경우 io.server.eio.clientsCount
Thanh Nguyen으로

2
예, 공식 문서가 크게 향상 될 수 있습니다
CodeAndCats

18

버전 +2.0

버전 +2.0에서는 쿼리하는 네임 스페이스 / 룸 / 노드를 지정합니다.

브로드 캐스트와 마찬가지로 기본값은 기본 네임 스페이스 ( '/')의 모든 클라이언트입니다.

const io = require('socket.io')();  
io.clients((error, clients) => {
      if (error) throw error;
      console.log(clients); // => [6em3d4TJP8Et9EMNAAAA, G5p55dHhGgUnLUctAAAB]
});

특정 네임 스페이스에 연결된 클라이언트 ID 목록을 가져옵니다 (해당되는 경우 모든 노드에서).

const io = require('socket.io')();
io.of('/chat').clients((error, clients) => {
     if (error) throw error;
     console.log(clients); // => [PZDoMHjiu8PYfRiKAAAF, Anw2LatarvGVVXEIAAAD]
});

네임 스페이스의 방에있는 모든 클라이언트를 가져 오는 예 :

const io = require('socket.io')();
io.of('/chat').in('general').clients((error, clients) => {
      if (error) throw error;
      console.log(clients); // => [Anw2LatarvGVVXEIAAAD] 
});

이것은 공식 문서입니다. Socket.IO Server-API


1
모든 소켓 객체 를 볼 수있는 방법이 있습니까? 예를 들어 socket.username연결 할 때 각 소켓에 속성을 추가하면 이 소켓 개체를 모두 볼 수있는 방법이 있습니까 (각 소켓에 추가하는 사용자 정의 속성 포함)? (참고로, 현재 클라이언트가 연결할 때 추가 소켓 정보를 저장하기 위해 전역 객체 변수를 사용하고 있습니다. 따라서 설정 방법을 묻지 않고 '기본'으로 모든 소켓 객체를 볼 수있는 방법이 있는지 알고 싶습니다) .
user1063287 2016 년

1
음, 이 답변에 따라 , 난 당신이 모든 연결 소켓을 볼 수 있다고 생각 console.log(io.sockets.connected)- 각각의 속성 값이 속성이 모두 포함 된 "소켓 객체"인 객체 것으로 보인다 nsp, server, adaptor, id(문자열), client, conn, rooms, acks, connected, disconnected, handshake, fns, flags, _rooms, _events, _eventsCount그리고 마지막으로 username내가 연결 각 소켓에 추가 사용자 지정 속성이다.
user1063287 2016 년

17

서버에서 소켓 객체에 액세스 할 수 있고 닉네임을 할당하고 소켓 ID를 지정할 수 있다고 생각합니다.

io.sockets.on('connection',function(socket){ 
    io.sockets.sockets['nickname'] = socket.id;
    client.on("chat", function(data) {      
        var sock_id = io.sockets.sockets['nickname']
        io.sockets.sockets[sock_id].emit("private", "message");
    });    
});

disconnect에서 별명을 제거하십시오 io.sockets.sockets.


'client.on'의 목적은 무엇입니까? 다음과 같은 코드를 사용할 수 있습니까 (1 소켓의 데이터 만 허용) ?: io.sockets.sockets [sock_id] .on ( 'newmessage', function (data) {console.log (data)});
호크

9

이것이 socket.io 1.3에서 액세스하는 가장 좋은 방법입니다

Object.keys(socket.adapter.rooms[room_id])


날이 예제를 공유 할 주시기 바랍니다 var room = io.sockets.adapter.rooms[room_id]; var connections = _.map(Object.keys(room), function(socketId){ return (io.sockets.connected[socketId].connected == true) });
HANY Alsamman

5

연결된 클라이언트 수를 원하는 사람이라면 누구나 그렇게 할 것이라고 믿습니다.

io.sockets.manager.server.connections


연결된 클라이언트 수를 테스트하지 않았습니다.
mrzmyr

5
정확한 카운트 사용을 위해io.sockets.clients().length
Ivo

2
현재 모두 io.sockets.manager.server.connectionsio.sockets.clients().length해달라고 작동합니다. 이것은 나를 위해 일했다-카운트 전용- io.engine.clientsCount그리고 클라이언트 목록- io.engine.clientsCount. 3 년 넘게이 길을 지켰 기 때문입니다. 연결 정보를 얻는 안정적인 방법 인 것 같습니다. (조셉 다 익스트라의 답변에 따라)
Aswin 라마 크리슈에게

5

Socket.io 1.4.4

당신을위한 샘플 코드.

function get_clients_by_room(roomId, namespace) {
        io.of(namespace || "/").in(roomId).clients(function (error, clients) {
            if (error) { throw error; }
            console.log(clients[0]); // => [Anw2LatarvGVVXEIAAAD]
            console.log(io.sockets.sockets[clients[0]]); //socket detail
            return clients;
        });
    }

나는이 코드 블록을 누군가에게 도움이 될 것이라고 생각합니다.


4

Socket.IO 1.4에서

연결된 모든 사용자의 배열을 얻으려면 :

var allConnectedClients = Object.keys(io.sockets.connected);// This will return the array of SockeId of all the connected clients

모든 클라이언트 수를 얻으려면 :

var clientsCount = io.engine.clientsCount ; // This will return the count of connected clients

나는 이것이 socket.io의
Sébastien

3

socket.io 1.5에서 감가 상각 된 것으로 보이는 indexOf의 변경 사항을 주목하고 valueOf로 대체하십시오.

function findClientsSocket(roomId, namespace) {
    var res = [];
    var ns = io.of(namespace ||"/");    // the default namespace is "/"

    if (ns) {
        for (var id in ns.connected) {
            if (roomId) {
                //var index = ns.connected[id].rooms.indexOf(roomId) ;
                var index = ns.connected[id].rooms.valueOf(roomId) ; //Problem was here

                if(index !== -1) {
                    res.push(ns.connected[id]);
                }
            } else {
                res.push(ns.connected[id]);
            }
        }
    }
    return res.length;
}

socket.io 버전 2.0.3의 경우 다음 코드가 작동합니다.

function findClientsSocket(io, roomId, namespace) {
    var res = [],
        ns = io.of(namespace ||"/");    // the default namespace is "/"

    if (ns) {
        for (var id in ns.connected) {
            if(roomId) {
                // ns.connected[id].rooms is an object!
                var rooms = Object.values(ns.connected[id].rooms);  
                var index = rooms.indexOf(roomId);
                if(index !== -1) {
                    res.push(ns.connected[id]);
                }
            }
            else {
                res.push(ns.connected[id]);
            }
        }
    }
    return res;
}

당신은 나를 얼마나 구원했는지 상상할 수 없습니다
nicholaswmin

그러나 socket.io 버전은 아직 1.5가 아닙니다! 지금 1.4.8입니다
leszek.hanusz

@MoleIsKing Obrigado 아미고!

2

socket.io 1.3에서 나는 이것을 2 줄로 달성했다.

var usersSocketIds = Object.keys(chat.adapter.rooms['room name']);
var usersAttending = _.map(usersSocketIds, function(socketClientId){ return chat.connected[socketClientId] })

2

Socket.io 1.7.3 (+) :

getConnectedList () 함수
{
    let list = []
    
    for (io.sockets.connected의 클라이언트를 보자)
    {
        list.push (클라이언트)
    }
    
    반품 목록
}

console.log (getConnectedList ())

// [ 'yIfhb2tw7mxgrnF6AAAA', 'qABFaNDSYknCysbgAAAB']를 반환합니다.]


2

버전 2.3의 경우이 기능을 사용하면 소켓도 얻을 수 있습니다. 소켓 을 사용한 후에도 읽을 수있는 문서가 거의 없어서 socketIo가 너무 빠르게 변경되는 것 같습니다.

ioSite.of('/').in(roomId).clients((error, clients) => {
    if (error) throw error;
    for (var i=0;i<clients.length;i++) {
        clientId=clients[i];
        console.log(clientId);

        // load the socket of your namespace
        var socket=ioSite.of('/').in(roomId).connected[clientId]
        console.log(socket.constructor.name);
        console.log(socket.id);
    }
});

소켓 Io에 대한 느낌이 항상 있기 때문에 여전히 이것이 기분이 좋지 않습니다.


1
가비지 라이브러리라고 생각하기 시작했습니다. 여러 유형의 데이터 (json, 이진 등)를 완벽하게 전송하는 것만 그렇지 않으면 전체 아키텍처가
허물고

1

소켓의 관리자 속성에서 액세스 할 수 있다고 생각하십니까?

var handshaken = io.manager.handshaken;
var connected = io.manager.connected;
var open = io.manager.open;
var closed = io.manager.closed;

어레이가 연결이 끊긴 클라이언트를 반환하는 문제가 발생하여 3rdEden의 답변이 효과가 없었습니다. Object.keys (io.manager.open) .length는 내 경험에서 가장 신뢰할 수있는 것으로 판명되었습니다. 네임 스페이스를 사용하는 경우 io.of ( '/ namespace'). manager.open
Wes Johnson

1

나는 여기에 많은 좋은 답변을 보았고 많은 유용한 곳이 있지만 필요한 것은 아닙니다. 관심있는 클라이언트가 주어진 레코드의 모든 변경 사항을 청취 할 수있는 pubsub 기능에 소켓을 사용하고 있습니다.

내 특정 문제는 같은 소켓이 같은 방에 여러 번 참여하고 있다는 것입니다. 이에 대한 해결책은 소켓에 룸 내부에 이미 룸 속성이 있는지 확인하는 것입니다.

var room = myObj.id.toString();
if (socket.rooms.indexOf(room) === -1) {
    socket.join(room);
    socket.emit('subscribed', {to : room});
} else {
    console.log("Already in room");
}

이것이 누군가를 돕기를 바랍니다.


소켓 연결시 클라이언트가 룸에 참여하게하면 'if'문을 피할 수 있다고 생각합니다.
Chayemor

myObj는 어디에서 왔습니까? 그 가치에 어떻게 도달 했습니까?
Michael Draper

@MikeDraper myObject는 채널 역할을하는 데이터베이스의 레코드입니다. 이것이 해결하는 것은 데이터베이스가 변경 될 때마다 모든 클라이언트가 업데이트되도록하는 경우입니다 (예 : 사용자가 이름을 업데이트하고 연결된 모든 클라이언트가 업데이트를받는 경우). 따라서 고유 한 인스턴스 (BSON)가 주어지면 해당 인스턴스 ID의 공간을 만듭니다. 유스 케이스에는 매우 구체적인 값이므로 혼란을 일으킨 경우 죄송합니다. 당신이 :) 도움이 필요하면 알려주세요
거스 오티즈에게

@JMR 내 응용 프로그램의 특성으로 인해 소켓이 두 번 이상 구독되었으므로 확인을 추가해야했습니다.
거스 오티즈

1

네임 스페이스 나 룸을 사용하지 않는 경우 Socket.IO 1.0+에서 가장 간단한 방법입니다.

io.nsps["/"].sockets.length

이것은 기본 네임 스페이스를보고 사용할 필요없이 소켓 배열의 길이를 결정합니다. Object.keys()


1

버전 1.5.1부터 다음을 사용하여 네임 스페이스의 모든 소켓에 액세스 할 수 있습니다.

var socket_ids = Object.keys(io.of('/namespace').sockets);
socket_ids.forEach(function(socket_id) {
    var socket = io.of('/namespace').sockets[socket_id];
    if (socket.connected) {
        // Do something...
    }
});

어떤 이유로, 그들은 소켓 ID를 저장하기 위해 배열 대신 일반 객체를 사용하고 있습니다.


이것은 작동합니다. io.of ( '')의 빈 문자열은 네임 스페이스없이 작동합니다.
Király István

@ KirályIstván 나는 이것에 대해 한동안 살펴 보지 않았지만 of()그 경우 연결된 통화를 완전히 제거 할 수 있다고 생각합니다 .
rppc

1

클러스터 모드의 경우 redis-adaptor 사용

io.in(<room>).clients(function(err, clients) {

});

각 소켓 자체가 방이므로 소켓을 사용하여 소켓이 존재하는지 확인할 수 있습니다.


0

다음은 ES6 생성기를 사용하여 연결된 소켓의 해시를 네임 스페이스에서 배열로 변환하는 빠른 방법입니다 (socket.io> = v1.0.0에 적용됨).

io.on('connection', function(socket) {
  var hash = io.of('/').connected
  var list = null

  hash[Symbol.iterator] = function*() {
    // for..of loop to invoke Object.keys() default iterator
    // to get the array values instead of the keys
    for(var id of Object.keys(hash)) yield hash[id]
  }

  list = [...hash]
  console.log(Array.isArray(list)) // true
})

0

이것이 여전히 진행되고 있는지 모르겠습니다. 그러나 이와 같은 것은 내가 사용한 결과입니다 ( 연결 된 각 소켓에 세션 객체를 유지합니다.이 소켓에는 사용자 이름과 다른 정보가 포함됩니다.

var connectedUsers = Object.keys(io.sockets.connected).map(function(socketId) {
    return io.sockets.connected[socketId].session.username;
});

0

프로젝트에 socket.io 클러스터 가있는 경우 socket.io-redis 어댑터가 사용되고 있음을 의미 합니다.

위와 같은 경우 모든 연결된 소켓 ID 프로세스를 가져 오는 것은 socket.io-redis 어댑터 를 통해 적용해야합니다 . 아래 예제가이를 위해 사용될 수 있습니다.

io.of('/').adapter.clients(function (err, clients) {
  console.log("clients: ", clients); // an array containing all connected socket ids
});


io.of('/').adapter.allRooms(function (err, rooms) {
  console.log("all rooms: ", rooms);
});

자세한 내용은 socket.io-redis github 페이지 를 방문 하십시오.


0

socket.io@1.7.3

소켓 배열을 연결하기 위해 Object.Keys를 사용했습니다. 그런 다음 동일한 배열에서 map 함수로 반복하여 새로운 객체 배열을 만듭니다.

var connectedUsers = Object.keys(io.sockets.connected).map(function(socketId) {
    return { socket_id : socketId, socket_username: io.sockets.connected[socketId].username };
});

// test
console.log(connectedUsers);

아마도이 답변은 소켓 ID / 사용자 이름 배열을 얻는 데 도움이 될 수 있습니다.


1
안녕하세요-문제가 어떻게 해결되는지 영어로 설명해 주시겠습니까? 이렇게하면 코드 전용 답변이 아닙니다. 감사!
Max von Hippel

0

v.10

var clients = io.nsps['/'].adapter.rooms['vse'];
/* 
'clients' will return something like:
Room {
sockets: { '3kiMNO8xwKMOtj3zAAAC': true, FUgvilj2VoJWB196AAAD: true },
length: 2 }
*/
var count = clients.length;  // 2
var sockets = clients.map((item)=>{  // all sockets room 'vse'
       return io.sockets.sockets[item];
      });
sample >>>
var handshake  = sockets[i].handshake; 
handshake.address  .time .issued ... etc.

1
'이것이 가장 좋은 방법'인 이유와 위의 많은 답변에 어떻게 답이 추가되는지에 대한 맥락을 추가 할 수 있다면 좋을 것입니다. 코드는 무언가이지만 대답에는 설명이 필요합니다. 보시다시피이 질문에 대한 다른 많은 답변이 있습니다. 대답은 주제에 더 많은 것을 가져와야합니다. 그렇지 않으면 중복됩니다.
Nathan Ripert

socket.io 2.1.1 , 내가 도착 TypeError: clients.map is not a function하고 약속 보이지만, 난 완전히 확실 위의 예에서 달성 할 것 아니에요 - 난 사용자 이름이 :) 포함로는 자동적으로 클라이언트 객체의 배열을 만들 것이라고 기대했다.
user1063287
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.