room계층 소켓 연결 후 소통 질문
서버쪽에선
socket.on("join", (data) => {
socket.join(data); // 방 참가
socket.to(data).emit("join", {
user: "system",
chat: `${socket.request.session.color}님이 입장하셨습니다.`,
});
});이렇게 room계층 소켓으로 연결했고, 해당 room으로 join이벤트를 보냈는데
브라우저 쪽에선
const socket = io.connect("http://localhost:8005/chat", {
path: "/socket.io",
});
socket.emit("join", new URL(location).pathname.split("/").at(-1));
socket.on("join", function (data) {...}/chat 네임스페이스 계층 소켓으로 밖에 연결하지 못했는데 어떻게 해당 room계층으로 온 join이벤트인지 구별하는 게 가능한지 궁금합니다. room계층보다 상위인 네임스페이스 계층에 연결했으니 어느 room으로 오든 네임스페이스만 같으면 모든 이벤트를 다 감지하게 되는 것 아닌가요?
답변 1
1
브라우저의 socket.emit('join')은 서버의 /chat 네임스페이스로 보내는 요청입니다. room 계층과는 관련이 없습니다.
브라우저의 socket.on('join')을 의미하시는 것이면 /chat 네임스페이스에 연결했고 서버에서 socket.join(방아이디)로 해당 room에 브라우저 소켓을 등록했으니 서버에서 해당 브라우저 소켓에 socket.to(방아이디).emit하면 그 방에 참가한 브라우저 소켓들에 join 이벤트가 전달되는 것이죠.
0
서버에서 socket.join(방아이디) 하면 서버만 room으로 들어가는 것이 아닌, 브라우저도 같이 그 room으로 들어가게 되나요?
네임스페이스까지는 서버에서도 네임스페이스로 소켓 연결하고, 브라우저에서도 네임스페이스로 소켓 연결하는 식으로 양쪽이 다 각각 연결해줬었는데 room계층에선 서버 한쪽만 연결해주는 것 같아 헷갈립니다
1
socket.join(방아이디)에서 socket은 브라우저의 소켓을 의미합니다. 서버가 room으로 들어가는게 아니라 브라우저가 room으로 들어가는 겁니다.
브라우저의 소켓을 서버에 등록하는 겁니다.
깃헙 질문
0
82
2
강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.
0
76
1
aws - lightsail 이용 관련
0
58
1
4강 http 서버 만들때 ESM방식으로 해도 될까요?
0
81
2
모듈 사용 시 단점이 있나요?
0
81
1
node.js 버전 및 typescript 적용 문의
0
95
2
12.7. 방장기능(강퇴) 질문드립니다.
0
80
2
12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요
0
69
1
12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.
0
75
2
12.7.1스스로 해보기 질문되나요
0
95
3
시퀄라이즈 실습하기 질문드립니다.
0
196
9
<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.
0
97
2
크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.
0
113
2
구매 결제관련 질문입니다 !
0
123
1
다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제
0
133
2
node 설치 방법이 전혀다르게 바뀐것 같습니다.
0
152
2
12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류
0
122
2
무료/프리미엄 동시 소유 시 질문
0
117
1
비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?
0
135
2
10강 cors에러 localhost:4000으로 접속했을때 에러
1
159
2
webstorm 해결할 수 없는 변수 문제
0
155
2
혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?
0
149
2
LightSail 실행 중 오류 질문드립니다!
0
204
2
RedisStore 사용법 질문
0
133
2





