chat.adapter.rooms의 시간순 정렬 여부
119
작성한 질문수 4
// socket.js
socket.on('disconnect', async () => {
console.log('chat 네임스페이스 접속 해제');
// /room/방아이디 => URL에서 가져오기.
const { referer } = socket.request.headers;
const roomId = new URL(referer).pathname.split('/').at('-1');
const currentRoom = chat.adapter.rooms.get(roomId); // 현재 방의 인원이 0이면(방장도 나감) 자동삭제.
const userCount = currentRoom?.size || 0;
if (userCount === 0) {
await removeRoom(roomId);
room.emit('removeRoom', roomId); // room 네임스페이스에 이 방이 제거됬다고 알려서 실시간으로 제거할 것임.
console.log('방 제거 요청 성공');
} else {
// 시스템 메시지 DB 저장
const systemChat = `${socket.request.session.color}님이 퇴장하셨습니다.`;
await createChat(roomId, 'system', systemChat);
const memberList = [...currentRoom].map((socketId) => {
return {
color: chat.sockets.get(socketId).request.session.color,
socketId,
};
});
// 누군가 나가면 그 방의 모든 사람에게 시스템 메시지 및 정보 전달.
socket.to(roomId).emit('exit', {
user: 'system',
chat: systemChat,
memberList,
});
}
});
});
};
여기서 chat.adapter.rooms.get(roomId) = currentRoom이 Set객체인데 여기 쌓이는 socketId들은 접속한 순서대로 쌓이나요? 그러니까, 시간순 정렬이 되어있는 건가요?
방장 위임하는 기능 구현 중인데 '방에 방장 정보를 저장한다' 이걸 어떻게 해야할 지 모르겠습니다🤔
답변 2
0
일단 방장 정보는 DB에 저장하면 됩니다. 현재 익명 방장인지라 방장의 소켓아이디를 방에 저장하여야 합니다. 방장 위임은 방장 소켓아이디를 다른 사람으로 바꿔주면 됩니다. 방장의 컬러이름과 소켓아이디를 서버에서 연결해둔 객체를 활용해야 합니다.
0
안녕하세요, 인프런 AI 인턴입니다. yeolan님.
문의하신 사항에 대해 연관된 기존 답변이 아래에 있습니다. 이는 Socket.io와 Room 관리를 다루고 있으며, 방장 정보를 관리하는 것에 대한 개념을 포함하고 있습니다.
여기 두 가지 관련된 질문과 답변을 참고하실 수 있을 것 같습니다:
위 질문에서는 socket.io를 이용한 방과 접속자 관리를 다루며, 사용자 정보를 어떻게 관리할 수 있는지에 대해 논의하고 있습니다. 이를 참고하여 방장 정보를 별도로 저장하고 관리하는 방법을 고민해보시면 도움이 될 수 있을 겁니다.
요약된 설명:
- socket.io에서 adapter.rooms:
adapter.rooms는 각 방의 소켓 ID들을 관리하는 객체입니다. 이는 방에 속한 소켓들이 Set 형태로 저장되므로 순서는 보장되지 않습니다. 따라서 방장 위임 등의 기능을 구현하려면 방장 정보를 별도로 관리하는 것이 좋습니다.
- 방장 정보 관리: 방장 정보를 방금 생성된 방에 저장하거나, 방장 교체 시 적절하게 업데이트하여 보관하는 방식으로 관리할 수 있습니다. 예를 들어, 방장의 소켓 ID를 별도의 변수나 데이터베이스에 저장할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
깃헙 질문
0
79
2
강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.
0
74
1
aws - lightsail 이용 관련
0
56
1
4강 http 서버 만들때 ESM방식으로 해도 될까요?
0
78
2
모듈 사용 시 단점이 있나요?
0
78
1
node.js 버전 및 typescript 적용 문의
0
91
2
12.7. 방장기능(강퇴) 질문드립니다.
0
78
2
12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요
0
67
1
12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.
0
73
2
12.7.1스스로 해보기 질문되나요
0
89
3
시퀄라이즈 실습하기 질문드립니다.
0
186
9
<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.
0
94
2
크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.
0
109
2
구매 결제관련 질문입니다 !
0
120
1
다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제
0
130
2
node 설치 방법이 전혀다르게 바뀐것 같습니다.
0
146
2
12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류
0
119
2
무료/프리미엄 동시 소유 시 질문
0
113
1
비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?
0
133
2
10강 cors에러 localhost:4000으로 접속했을때 에러
1
155
2
webstorm 해결할 수 없는 변수 문제
0
152
2
혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?
0
146
2
LightSail 실행 중 오류 질문드립니다!
0
198
2
RedisStore 사용법 질문
0
129
2





