Skip to content

[❗️Error Handling] [Workspace] socket.io 통신에서 emit을 여러번 보내기 #214

@lovelysi0113

Description

@lovelysi0113

어떤 에러인가요?

  • 한 이벤트 함수 내에서 emit을 여러번 보내지 못하는 이슈

에러 메시지

  • 한 유저가 채팅 메시지를 작성하면 다른 유저들에게 그 채팅 메시지를 보내 화면에 표시하도록 되어있었다(sendMessage)
  • 그런데 채팅 메시지를 수정/삭제를 위해 그 채팅 메시지의 id를 알려줄 필요가 생겼고(id를 사용하여 DB에 접근할 수 있다)
    id를 작성자에게 보내주도록 코드를 보완해야했다(nowMessageId)
  • 하지만 실제로 테스트 해보니 하나만 보내지거나 둘다 보내지지 않는 문제가 생겼다

에러 핸들링 방법

  • emit을 보내는 다양한 방법을 찾아보고 적용해보며 우리가 원하는 동작을 할 때까지 테스트를 진행했다
  1. 소켓 아이디를 사용하여 sender에게만 보내기 (실패: emit이 보내지지 않음)
    socket.broadcast.to(room).emit('sendMessage', { ...chat });
    socket.to(socket.id).emit('nowMessageId', { id: chat.id });
  2. 모두에게 보내는 방식 사용하기 (실패: 한 emit만 보내짐)
    socket.to(room).emit('sendMessage', { ...chat });
    chatIo.to(room).emit('nowMessageId', { id: chat.id });
  3. 여러가지 방법을 시도했으나 계속 실패하던 도중 공식문서에서 해답을 찾을 수 있었다
    스크린샷 2021-06-02 오후 8 55 03
    그래서 공식 문서에 나온 대로 emit을 수정하여 시도했더니 성공했다..! 해결 완료!
    socket.to(room).emit('sendMessage', { ...chat });
    socket.emit('nowMessageId', { id: chat.id });

에러 핸들링을 위해 참고한 레퍼런스 링크

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions