์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์ํ๋ socket.rooms ๊ฐ์ฒด์ ๊ดํ ๊ฒ์ ๋๋ค.
์ด ํด๋ผ์ด์ธํธ๊ฐ ์๋ ๋ฐฉ์ ์๋ณํ๋ ๋ฌธ์์ด ํด์๋ก, ๋ฐฉ ์ด๋ฆ์ผ๋ก ์ธ๋ฑ์ฑ๋ฉ๋๋ค.
๊ทธ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง ์ ๋ ๋ถ๋ช ํฉ๋๋ค.
io.on('connection', function(socket){
socket.join('room 237', function(){
console.log(socket.rooms); // [ <socket.id>, 'room 237' ]
io.to('room 237', 'a new user has joined the room'); // broadcast to everyone in the room
});
});
console.log(socket.rooms);
์คํํ ๋ ๋๋ ๊ทธ ์์ ๋ฐฐ์ด์ _์ํฉ๋๋ค_ (๊ทธ๋์ ๋๋
io.on('connection', function(socket){
socket.join('room 237', function(){
console.log(socket.rooms); // { <socket.id>: '<socket.id>', 'room 237': 'room 237' }
});
});
... ๊ทธ๋ฐ ๋ค์ .keys()
์๋ ๋ฐฐ์ด๋ก ๋ณํํ ๋ค์ ์์ผ๋ก socket.id
๋ฅผ ์ ํํด์ผ ํฉ๋๋ค(์ฒซ ๋ฒ์งธ๊ฐ ์๋ ์ ์์ผ๋ฏ๋ก).
๋ฒ๊ทธ์ธ๊ฐ์? ๋๋ 1.7.3์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
๊ธ์, ์ฌ๊ธฐ ๋ฌธ์๊ฐ ์ต์ ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. rooms
๋ ์ค์ ๋ก v1.4๊น์ง ๋ฐฐ์ด์ด์์ต๋๋ค.
์ฐธ๊ณ : ๋ถ์ธ์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๊ธฐ๋ฅ ์์ฒญ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. socket.io๋ฅผ ๋ค์ ๋ฉ์ง๊ฒ ๋ง๋์ญ์์ค. ์ด๋ ์ด๋ฅผ ๋ค์ ๊ฐ์ ธ์ค์ธ์!
์ฌ๊ธฐ์ ๋ด ๋ชฉํ๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ ๋ฐฉ์ ๋ฐฐ์ด์ ์ป๋ ๊ฒ์
๋๋ค. ๋ฐฐ์ด์ ๊ฒฝ์ฐ socket.id
๊ฐ ์ฒซ ๋ฒ์งธ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
var rooms = socket.rooms.slice(1);
ํ์ฌ ๊ตฌํ ์ฌ์ฉ:
var roomKeys = Object.keys(socket.rooms);
var socketIdIndex = roomKeys.indexOf( socket.id );
var rooms = roomKeys.splice( socketIdIndex, 1 );
socket.id
๊ฐ ํฌํจ๋์ด ์์ง ์์๋ ๊ด์ฐฎ์ต๋๋ค. ๊ตณ์ด ์ฐพ์์ ๊ณจ๋ผ์ผ ํ๋ ๊ฑด ์ซ๋ค.
var rooms = Object.keys(socket.rooms);
๋ถ์ธ์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค์ ๊ฐ์ ํํฐ๋งํ ์ ์์ต๋๋ค(๋ง๋์?).
var roomKeys = Object.keys(socket.rooms);
var rooms = roomKeys.filter(function(key){
return socket.rooms[key]==true;
});
indexOf()
๋ก ๋ฐ๋ณตํ๋ ๊ฒ๋งํผ ๋๋ฆฝ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์๋ ๋ฐฉ์ ํฌํจํ๋ ๊ฒ์ด _์ข์ ๊ฒ_์
๋๋ค(์: ์ฐธ์ฌํ ์ ์๋ ๋ํ๋ฐฉ ํ์). Server
์ธ์คํด์ค์ ๊ฐ์ ๋ค๋ฅธ ๊ณณ์์ ์ ๋ณด๊ฐ ๋ ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
var allRooms = io.rooms;
var myRooms = socket.rooms;
๋ค๋ฅธ ์ฌ๋์ด ์ด์ ๋ํด ์๊ฒฌ์ด ์์ต๋๊น?
์, ์ด๊ฒ์ ๋ถํ์ํ๊ฒ ๋ณต์กํด ๋ณด์ ๋๋ค. ์ฌ์ฉ์์ ์์ผ ID๊ฐ "๋ฐฉ"์ด ๋๋ ์ด์ ๋๋ ํค:๊ฐ ์์ด ํ์ํ ์ด์ ๋ฅผ ์ดํดํ๋ ๋ฐ ์ ๋ง ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ชฉ๋ก์ผ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ค ๋ฐฉ์ด ์๋ , ๋น์ ์ ๊ฑฐ๊ธฐ์ ์๊ณ , ๋๋ฌ์ต๋๋ค.
['room1', 'room2', 'room3']
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด io.rooms๋ ๋ฌธ์์ด ๋ฐฐ์ด๋ก, ๋๋ ์ด ๊ฒฝ์ฐ ๋ฐฉ ์ด๋ฆ์ ํค๋ก, ์์ผ ID ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ๊ฐ์ง ๊ฐ์ฒด๋ก ๋ชจ๋ ๊ฐ์ ธ์ต๋๋ค.
{
room1: ['id1', 'id2', 'id3'],
room2: ['id4', 'id5', 'id6']
}
๊ฐ์ฅ ํฐ ์ด์ ๋ ์กฐํ ์ฑ๋ฅ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ 100๊ฐ์ ๋ฐฉ์ ์ฐธ์ฌํ์ ๋ ๋ฐฐ์ด ๊ฐ์ ๋ฐ๋ณตํ๋ ๊ฒ๋ณด๋ค ๊ฐ์ฒด ์กฐํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ๊ฐ ๋ฐฉ์ ์ฐธ์ฌํ๋์ง ํ์ธํ๋ ๊ฒ์ด ๋ ๋น ๋ฆ
๋๋ค.
stackoverflow์ ๋ํ ๋ด ๋๋ต์ ์ฐธ์กฐํ์ญ์์ค.
{
"room1":"room1",
"room2":"room2",
...
"room100":"room100"
}
์ฌ์ฉ์๊ฐ ๋ฐฉ์ ์ฐธ์ฌํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํฉ๋๋ค.
if(socket.rooms[roomID]) return true;
๋ฐฐ์ด ์ ํ์ธ ๊ฒฝ์ฐ indexOf๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ชจ๋ ๋ฐฐ์ด์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค.
if(socket.rooms.indexOf(roomID) != -1) return true;
๊ทธ๋ฌ๋ ํค ๊ฐ์ด ๋ถ์ธ๋ก ๋ณ๊ฒฝ๋๋ฉด ์ ์ ์ผ๋ก ๋์ํฉ๋๋ค.
{ room1: true, ... , room100: true }
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋๋ ๊ฐ์ด ๋ถ์ธ์ด ๋๋๋ก socket.rooms๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ ๋๋ค. ์ด๊ฑฐ ์์ ํด๋ ๊ด์ฐฎ๋์? CONTRIBUTING.md ํ์ผ์ ๋ณด์ง ๋ชปํด์ ๊ธฐ์ฌ ํ๋ก์ธ์ค๊ฐ ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
Set
๊ฐ ๋ ํฉ๋ฆฌ์ ์ด์ง ์์ต๋๊น?
if (socket.rooms.has(roomID)) return true;
์๋ฅผ ๋ค์ด ๊ตฌ์กฐ๋ ๋จ์ํ Set(4)ย {"<socket ID>", "room1", "room2", "room3"}
์
๋๋ค.
์ธํธ์ ์๊ฐ ๋ณต์ก๋๊ฐ ์ผ์ ํ๋ค๋ฉด ๋์ํฉ๋๋ค. ๋๋ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ๋ฏฟ์ต๋๋ค.
Socket.IO v3์์ Socket#rooms
๋ ์ด์ Set์ด ๋๋ฉฐ ๊ธฐ๋ณธ ์ด๋ํฐ์์ ์ ๊ณตํ๋ ๊ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์, ์ด๊ฒ์ ๋ถํ์ํ๊ฒ ๋ณต์กํด ๋ณด์ ๋๋ค. ์ฌ์ฉ์์ ์์ผ ID๊ฐ "๋ฐฉ"์ด ๋๋ ์ด์ ๋๋ ํค:๊ฐ ์์ด ํ์ํ ์ด์ ๋ฅผ ์ดํดํ๋ ๋ฐ ์ ๋ง ์ด๋ ค์์ ๊ฒช๊ณ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ชฉ๋ก์ผ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ค ๋ฐฉ์ด ์๋ , ๋น์ ์ ๊ฑฐ๊ธฐ์ ์๊ณ , ๋๋ฌ์ต๋๋ค.
['room1', 'room2', 'room3']
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ด io.rooms๋ ๋ฌธ์์ด ๋ฐฐ์ด๋ก, ๋๋ ์ด ๊ฒฝ์ฐ ๋ฐฉ ์ด๋ฆ์ ํค๋ก, ์์ผ ID ๋ฐฐ์ด์ ๊ฐ์ผ๋ก ๊ฐ์ง ๊ฐ์ฒด๋ก ๋ชจ๋ ๊ฐ์ ธ์ต๋๋ค.
{ room1: ['id1', 'id2', 'id3'], room2: ['id4', 'id5', 'id6'] }