Inflearn brand logo image

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

김영기님의 프로필 이미지
김영기

작성한 질문수

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

실시간으로 텍스트, GIF 보내기

12.7. 방장기능(강퇴) 질문드립니다.

작성

·

39

0

socket.on('kicked', (data) => {   console.log('강퇴 이벤트 수신');   alert(data.message);      window.location.href = data.redirectUrl;  });
   socket.on('kickUser', (userId) => {   console.log('강퇴 요청 받음:', userId);   const targetSocket = chat.sockets.get(userId);     if (targetSocket) {     console.log('강퇴 대상 소켓 찾음');     targetSocket.emit('kicked', {       message: '강퇴되었습니다.',       redirectUrl: '/'      });        setTimeout(() => {       // 강퇴된 소켓 연결 해제       targetSocket.disconnect(true);       console.log(`사용자 ${userId} 강퇴 완료`);     }, 100);    } else {     console.log(`사용자 ${userId} 소켓을 찾을 수 없음`);   } }); 

socket.on('kicked',가 작동을안하네요 서버쪽에서는 targetSocket.disconnect(true)정상작동합니다.

답변 2

0

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

다른 웹소켓 이벤트는 동작하나요? 다른것도 안 돌아가면 연결문제, 특정 이벤트만 안 돌아가면 수신자 지정 문제입니다

김영기님의 프로필 이미지
김영기
질문자

다른웹소켓이벤트는 작동해서, socket.on('kiced'on,..)의 위치를 위로 올리니까 정상적으로 작동되는데 이유가먼가요? 저 코드위치만 위로올렸는데 되네요

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

위치를 어디에서 어디로 옮기신건지가 중요합니다. 해당 코드의 실제 실행 여부, 순서 등이 영향을 끼치는 거라서요

김영기님의 프로필 이미지
김영기
질문자

socket.on('join',...)아래에 socket.on('kicked',...) 두엇다가

 const socket = io.connect('http://www.localhost:8005/chat', {
        path: '/socket.io',
        withCredentials: true
      });
socket.on('kicked', function(data){...    }

이런식으로 코드위치를 io.connect바로뒤로 하니까 되네요

0

안녕하세요, 인프런 AI 인턴입니다.

김영기님이 현재 직면한 문제는 클라이언트 쪽에서 socket.on('kicked', ... 이벤트가 작동하지 않는 것을 다루고 있습니다. 반면, 서버에서 소켓 연결 해제는 제대로 작동하고 있다고 언급하셨습니다.

이 문제는 여러 가지 이유로 발생할 수 있으며, 몇 가지 점검 사항을 통해 원인을 파악할 수 있습니다.

  1. 이벤트 등록 확인: 클라이언트 코드에서 socket.on('kicked', ...)가 올바르게 등록되어 있는지 확인합니다. 클라이언트가 연결된 후 이벤트 리스너가 등록되었는지 체크해 보세요.

  2. UserId 매칭: 서버에서 chat.sockets.get(userId)를 사용하는데, 올바른 userId 값이 전달되었는지 확인하세요. 만약 이 값이 잘못되었다면, 클라이언트가 이벤트를 수신하지 못할 수 있습니다.

  3. 데이터 전송 여부: 서버에서 targetSocket.emit('kicked', {...})로 데이터가 제대로 전송되고 있는지 확인합니다. 콘솔 로그 등을 이용하여 해당 부분이 제대로 작동하는지 검사하세요.

  4. 네임스페이스나 룸 설정: 클라이언트와 서버가 같은 네임스페이스나 룸에 연결되어 있는지 확인합니다. 설정이 잘못되어 있을 경우 이벤트가 전달되지 않을 수 있습니다.

  5. 네트워크 문제: 클라이언트와 서버 간의 네트워크 문제로 인해 이벤트 수신이 안 되는 경우도 있을 수 있으니, 네트워크 상태도 점검해 보세요.

관련하여 도움이 될 만한 기존 Q&A도 소개합니다:

이 링크들은 비슷한 문제를 다루고 있어 문제 해결에 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김영기님의 프로필 이미지
김영기

작성한 질문수

질문하기