inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

웹소켓 연동하기(socket.io, gateway)

broadcast를 사용하지않고 모든 소켓들에게 데이터를 전송할 수 있나요?

403

IJILKJ

작성한 질문수 68

0

어떤 이벤트가 왔을 때 연결되어 있는 모든 소켓들에게

데이터를 emit할 수 있는 방법중 하나가 broadcast인데

broadcast같은 경우 모든 소켓들에게 똑같은 데이터를 줘야하는데 만약 각 소켓들에게 조금씩 다른 데이터를 줘야한다면 

broadcast말고 어떤걸 사용해야하나요?

 

물론 각 소켓이 개별적으로 서버에게 요청해서 받는 방법이 있겠지만 요청 하나만 왔을 때 모든 소켓들에게 데이터를 전송할 수 잇는 방법이 있나요?

express nodejs NestJS TypeORM

답변 1

0

제로초(조현영)

각 소켓에게 개별적으로  emit하셔야합니다. to(소켓아이디) 사용해서요.

0

IJILKJ

그럼 연결됫 소켓들을 map형태로 저장해놨다가 개별적으로 보내야하는건가요?

아니면 연결된 모든 소켓아이디들을 가져오는 함수가 있나요?

0

제로초(조현영)

저장해두어야 합니다. 백엔드 코드 보시면 onlineMap이 있는데 그게 이 용도입니다. 아니면 방(room)을 만들어서 그 방에 보내고자 하는 사람을 다 모아두고 보내는 방법(to(방아이디))도 있습니다.

0

IJILKJ

답글을 보고 to 부분을 찾아보았는데 이것도 그냥 방안에 있는 사람들에게 broadcast하는 방식이여서 모두 같은 데이터를 보내줘야하는거같은데 맞나요?

방안에 사람들에게 모두 보내는데, 조금씩 다른 데이터를 보내야한다면 to는 못쓰는거같은데
이 경우 그냥 Map을 만들어서 개별적으로 보내는게 맞을까요?

Map으로 개별적으로 보내는 경우는 혹시 어떤 식으로 보내야하나요?
socketId를 알아낸다음에 해당 socket으로 보내는 메서드는 보질 못한거같아서요
(보통은 프론트에서 먼저 서버로 emit을 하고 nest의 경우 @ConnectedSocket 인자로 해당 소켓을 감지해서 보낼 수는 있지만
해당 인자가 아닌 다른 소켓의 경우도 보낼 수가 있는건지 해서..)

0

제로초(조현영)

socketId를 알아낼 수는 없고, 해당사람 정보와 소켓아이디를 보관하고 있는 Map이든 객체든을 만들어두셔야 합니다. 그리고 그 Map이나 객체를 반복문을 돌려서 일일이 to(소켓아이디)로 다른 값을 보내주어야 합니다.

0

IJILKJ

답글을 보고 to를 이용해서 하려고했는데 
socketio 공식문서를 보면 to를 이용하는 방법이 2가지가 나와있습니다.

 

방법1)

socket.to("room1").emit(..)

 

방법2)

io.to(socketId).emit(...)

 

제로초님이 말씀하신건 방법2 같고 저도 그걸 사용해보려고 했는데

방법1의 socket 변수는 @ConnectedSocket()의 인자인데

 

방법2의 io 변수는 nestjs에서 어떻게 Import해서 가져와야 하나요?

 

0

제로초(조현영)

방법2에서도 socket 쓰시면 됩니다.

0

IJILKJ

잘 안되서 이것저것 찾아보다가 

@WebsocketServer() server: Server

위 변수를 class내에 선언 해놓고

sever.to(socketId).emit(...) 이렇게하니까 작동이 되던데

 

server 변수말고 @ConnectedSocket()의 socket변수를 사용해야 하나요?

0

제로초(조현영)

제가 강좌에서 한대로 하시면 됩니다.

this.server.to(방아이디/소켓아이디).emit(이벤트, 데이터) 이렇게 했는데

이걸 그대로 쓰시면 됩니다.

강의자료는 어디서 다운받나요?

0

141

4

질문 있습니다.

0

315

3

코드 편집기 확장 프로그램

0

220

2

(질문)비밀 저장소에 접근하기 위한 인증 정보는 로컬 .env에 저장하는지?

0

161

2

(질문)외부 저장소를 통한 환경변수 불러오기 비동기 질문

0

177

3

로그인을 해도 LoggedInGuard쪽에서 false값이 나옵니다.

0

161

2

로그인방법이 고민됩니다.

0

197

2

yarn seed 명령어 실행 시 데이터 삽입 안됨

0

304

4

yarn run db:create 시에 발생하는 데코레이터 오류

0

247

2

npm run db:create 시에 발생하는 decorating 오류

0

245

2

RxJS 디버깅 질문 있습니다.

0

198

3

CacheManager에 대해 질문 있습니다.

0

184

2

로깅은 어떻게 하는게 효율적일까요?

0

236

1

CORS 질문 있습니다.

0

425

2

쿠키 옵션에 대해서 질문 있습니다.

0

188

2

로그아웃 요청이 403 forbidden 에러가 나는데 왜그런걸까요??

0

458

1

401 unauthorized문제

0

303

1

가드의 장점에 대해서 질문이 있습니다.

0

231

1

로그 관리에 대해 질문 있습니다.

0

254

2

CORS 에러 질문 있습니다.

0

328

2

배포 환경 DB 연결 질문 있습니다.

0

417

2

socket io 미 연결 문제 (nest & flutter)

1

1166

3

no elements in sequence 에러 관해서 질문이 있습니다.

0

462

1

start:dev-backup으로 돌리면 핫 리로딩이 되요 정상인가요?

0

323

1