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

신재우님의 프로필 이미지

작성한 질문수

탄탄한 백엔드 NestJS, 기초부터 심화까지

이벤트 설계와 기본 서비스 로직 완성

채팅앱 만들기 - 이벤트 설계와 기본 서비스로직 완성 에서 질문 있습니다

22.11.16 01:02 작성

·

413

0

function helloUser() {

const username = prompt('What is your name?');

socket.emit('new_user', username, (data) => {

drawHelloStranger(data);

});

}

사용자가 처음 화면에 진입했을 때에 사용자가 이름을 입력하고 나면 ‘new_user’에 해당하는 게이트웨이 로직이 실행되는 것으로 알고 있습니다.

이 로직 안에서 ‘user_connected’에 대해 브로드 캐스팅을 해주고 있는데요 socket.broadcast.emit('user_connected', username);

프론트엔드에서 아래와 같이 connected!라는 채팅글도 화면에 나타나야 할 것 같은데

socket.on('user_connected', (username) => {

drawNewChat(`${username} connected!`);

});

화면 진입자 입장에서는 connected!부분이 나타나지 않습니다. 왜 그런지 설명해주실 수 있을까요? 화면 진입자 또한 위 코드를 수행하고 있는데

화면 진입자를 제외한 나머지 사용자에게는 connected!가 나타나지만 화면 진입자는 나타나지 않는 이유가 궁금합니다.

답변 1

0

ohdnf님의 프로필 이미지

2023. 07. 18. 18:24

저도 해당 부분 궁금해서 찾아봤는데, Socket.IO 공식문서(링크)에 잘 나와있는 듯하여 공유드립니다.

@SubscribeMessage('new_user')
handleNewUser(@MessageBody() username: string, @ConnectedSocket() socket) {
  // 입장한 사람(sender) 제외 나머지 client에게 broadcast
  socket.broadcast.emit('user_connected', username);
  // 모든 client에게 broadcast
  // socket.emit('user_connected', username);
  return username;
}

핸들러 인자로 받는 socket에 보낸 사람의 정보가 있으니 이렇게 구분하여 broadcast할 수 있지 않나 싶네요.

오래된 질문이지만 도움이 되셨길 바랍니다.