1

ソケット io サーバーで配列を構築し、それをクライアントに送信しようとしています。

 var roomList = io.sockets.manager.rooms;

    // new Array to save the clients per room
    var clientsPerRoom = new Array();

    //for (var i = 0; i < roomList.length; i++) {
    for (var room in roomList) {
        room = room.replace("/", "");

        // get the clients per room
        var clients = io.sockets.clients(room).length;

        // saving it in the array at the name of the room
        clientsPerRoom[room] = clients;
    }
    // transmit it to the client
    io.sockets.emit('roomList', roomList, clientsPerRoom);

クライアント側

var clients = 1;

        for (room in roomList) {
            if (room.length > 0) {
                room = room.replace("/", "");

                clients = clientsPerRoom[room];

                console.log("ROOM: '" + room + "' has '" + clients + "' CLIENTS");

            }
        }

クライアントでは、「clientsPerRoom」は「[]」(空?) であるため、「clients」は「定義されていません」。私は何を間違っていますか?

ユーザーが接続している場合、サーバーからのコンソール ログの値は 1 です。より多くのユーザーがオンラインである場合、それでも 1 ですが、少なくともこの値をクライアントに送信する必要があります。

ありがとう

4

2 に答える 2

0

最後に私はそれを解決しました:

 var clients = io.sockets.clients(room).length;
            // has to look like this:
            //clientsPerRoom = {"test" : 3, "xyz" : 4};
            clientString = '"' + room + '" : "' + clients + '",' + clientString;

            console.log("clientsPerRoom[" + room + "] : " + clientsPerRoom[room]);
            console.log("__END OF LOOP__");
        }
    }
    //cut the "," et the end of the string (else: ERROR!)
    clientString = clientString.substr(0, clientString.length-1);
    // parse it with JSON to pretend beeing a object
    clientsPerRoom = JSON.parse('{' + clientString + '}');

    // now send it to the client
    io.sockets.emit('roomList', roomList, clientsPerRoom, totalClients);

さて、別の問題は、

var clients = io.sockets.clients(room).length;

は常に 1 です...

于 2013-03-28T14:02:52.413 に答える
0

まだ解決しました。

問題は: io.sockets.clients(room) はウェブカメラへのアクセスを許可したユーザーのみをカウントします。

ご挨拶

于 2013-03-28T15:31:25.393 に答える