인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

노른자님의 프로필 이미지
노른자

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

socket io Namespace vs Room

작성

·

972

1

채팅앱을 만들고있는데, 단체방이든 일대일방이든 참여방 ID별로 나눠서 분배해주려고합니다.

 

그래서 namespace와 room 둘중 하나만 써도 될것같은데, 어떤것을 쓰는게 더 나은지, 차이점이 뭔지 모르겠습니다.

그리고 client에서 자신이 포함된 채팅방들을 구독해야하는데,  namespace들을 한번에 여러개 구독하기위해서 어떻게 해야할지 모르겠습니다..

 

답변 1

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

단체방, 일대일방처럼 큰 카테고리가 namespace고

그 안에서 개별 방들의 id가 room입니다. socket.of(네임스페이스).join(방아이디) 이렇게 됩니다.

자신이 포함된 채팅방들을 구독하려면 서버에 자신의 구독한 방 목록을 보내고 서버에서 socket.join(방 아이디)해야 합니다. 여러 개변 반복문 안에서 socket.join 하면 되고, 방 목록이 db에 있는 경우는 db에서 방 아이디를 저장했다가 불러와서 socket.join하면 됩니다.

노른자님의 프로필 이미지
노른자
질문자

저같은경우는 구지 namespace와 room을 두번 나눌필요가 없으니, 서버통쨰로 그냥 하나의 namespace로 보고

그안에 여러 room을 만들어 join시켜주면 되는것이겠군요.

 

클라이언트단에서는 namespace들을 구독하려면

IO.Socket socket = IO.io('http://$apiDomain/room/1', <String, dynamic>{
'transports': ['websocket'],
});
IO.Socket socket = IO.io('http://$apiDomain/room/2', <String, dynamic>{
'transports': ['websocket'],
});

이런식으로 해야하는데 이것을 반복문 돌리기는 힘드니, (챰고로 위 언어는 dart 입니다)

socket.join으로 반복문을 돌려야하는데, 그렇다면 필연적으로 namespace가아닌 room을 선택해야겠네요.

혹시 틀린점있을까요..??

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

클라이언트에는 room이라는 게 없습니다. 네임스페이스까지만 있고요. 서버에서 join하셔야합니다.

노른자님의 프로필 이미지
노른자

작성한 질문수

질문하기