backend
socket.on(방이름: string , function)
frontend에서 emit의 세번째 인자로 넘겨준 콜백을 backend에서 호출 할 수 있고, 이는 frontend에서 실행 된다.
frontend
socket.emit(방이름: string , object, function)
emit으로 자유로운 타입의 원하는만큼의 매개변수를 넘겨 줄 수 있다. 다만, functon은 매개변수의 마지막에 위치해야 한다.
socket.join(방이름)
socket.join([방1, 방2])
socket.to(방이름).emit()
socket.leave(방이름)
wsServer.sockets.emit()
방과의 연결이 완전히 끊어지기 직전에 발생하는 이벤트
socket.rooms
는 존재하는 모든 방목록을 Set type으로 반환한다
socket.on("disconnecting", () => {
socket.rooms.forEach((room) => socket.to(room).emit("bye"));
});
socket.onAny(event, ()=> { console.log(event)})
모든 참가자들을 room1에 입장시키기
wsServer.socketsJoin(room1)
room1의 참가자들을 room2, room3에 입장시키기
wsServer.in(room1).socketsJoin([room2, room3])
서로 다른 서버들 사이에서 실시간 어플리케이션을 동기화 하는 역할.
wsServer.sockets.adapter
wsServer.sockets.adapter.sids
wsServer.sockets.adapter.rooms
sids, rooms 모두 Map 타입
공개방 제목만 가져오는 코드
const { sockets: { adapter: { sids, room } } } = wsServer;
const publicRooms = [];
// Map을 forEach 돌리면 forEach의 매개변수는 forEach(value, key)가 된다
// Map.get(key) => value를 리턴
rooms.forEach((value, key) => {
// if 개인방이 존재하지 않는다면 , 즉 공개방이라면
if(sids.get(key) === undefined) {
publicRooms.push(key);
}
});
rooms는 Map 객체, rooms의 value값은 Set객체이므로, Set의 크기인 Set.size로 특정 roomName의 크기를 알 수 있다.
wsServer.sockets.adapter.rooms.get(roomName)?.size
wsServer.on("connection", (socket) => {
wsServer.sockets.emit("room_change", publicRooms());
});
1) 세팅후 https://admin.socket.io 접속
2) ServerURL을 내도메인/admin
로 설정하기