[WebSocket/Socket IO] 채팅 서비스 구현 6. 채팅방 알림 전송하기

2022. 12. 6. 15:00·개발/Projects

이번에는 사용자가 동일한 채팅방에 접속했을 때 알림을 보내보도록 하겠습니다. 이전 포스팅에서 채팅방을 만들고 여기에 참여(join)하는 것까지 구현했었는데요. to 메소드를 사용하여 접속한 방에 새로운 메시지를 전송(emit) 할 수 있습니다.

 

현재 home.pug 구조는 아래와 같습니다.

// home.pug

doctype html
html(lang="en")
  head
    meta(charset="UTF-8")
    meta(http-equiv="X-UA-Compatible", content="IE=edge")
    meta(name="viewport", content="width=device-width, initial-scale=1.0")
    link(rel="stylesheet", href="https://unpkg.com/mvp.css")
    title Zoom
  body
    header
      h1 Chat Service
    main
      div#room
        form
          input(type="text", placeholder="Type a room name", required)
          button Enter the Room
      div#chat
        h2 Room Name
        ul
        form
          input(type="text", placeholder="Input your message", required)
          button Send
    script(src="/socket.io/socket.io.js") 
    script(src="/public/js/app.js")

server.js로 이동하여 아래와 같이 채팅방에 접속하면 "greeting" 이벤트를 트리거하도록 설정해줍니다.

// server.js

ioServer.on("connection", (socket) => {
  socket.onAny((event) => {
    console.log(`Socket Event: ${event}`);
  }); // 발생하고 있는 이벤트를 로그
  socket.on("room", (roomName, showRoom) => {
    socket.join(roomName); // 채팅 방에 소켓 연결하기
    showRoom();
    socket.to(roomName).emit("greeting"); // 참여한 room에 greeting 이벤트 전송
  });
});

httpServer.listen(8000);

다음으로 프론트에서 서버에서 전달된 "greeting" 이벤트를 받을 수 있도록 다음과 같이 socket.on("greeting", () => {} 작성합니다. 이는 sendMessage라는 함수를 트리거하도록 설정하고 해당 함수에 메시지를 표시하는 로직을 적어줍니다.

// app.js

// 새로운 사람이 들어오면 환영 메시지를 보내는 로직
function sendMessage(message) {
  const ul = chat.querySelector("ul");
  const li = document.createElement("li");

  li.innerText = message;
  ul.appendChild(li);
}

// greeting이라는 이벤트를 받게 되면 다음 함수를 실행하게 됨
socket.on("greeting", () => {
  sendMessage("Someone has joined!");
});

동일한 방식으로 퇴장 알림을 보낼 수도 있습니다. 참여한 방에서 떠나며 접속이 끊기는 경우, disconnecting을 사용하여 이벤트를 트리거할 수 있습니다.

// server.js

socket.on("disconnecting", () => {
  socket.rooms.forEach((room) => socket.to(room).emit("goodbye"));
});
// app.js

socket.on("goodbye", () => {
  sendMessage("Someone has left.");
});

아래와 같이 동일한 방에 접속하고 나갈 때 알림이 추가된다면 성공입니다!

 

'개발 > Projects' 카테고리의 다른 글

[WebSocket/Socket IO] 채팅 서비스 구현 7. 메시지 전송 및 수신  (0) 2022.12.06
[WebSocket/Socket IO] 채팅 서비스 구현 5. 채팅방 만들기  (0) 2022.12.06
[WebSocket/Socket IO] 채팅 서비스 구현 4. Socket IO 설치 및 연결하기  (0) 2022.12.06
'개발/Projects' 카테고리의 다른 글
  • [WebSocket/Socket IO] 채팅 서비스 구현 8. 닉네임 설정하기
  • [WebSocket/Socket IO] 채팅 서비스 구현 7. 메시지 전송 및 수신
  • [WebSocket/Socket IO] 채팅 서비스 구현 5. 채팅방 만들기
  • [WebSocket/Socket IO] 채팅 서비스 구현 4. Socket IO 설치 및 연결하기
휘Hwi
휘Hwi
여행, 사진, 개발, 책 이야기를 기록하는 여행자 휘의 블로그 𓂍
마이리얼트립 프로모션 할인 🏝️
마이리얼트립 호텔 예약 배너
※ 배너를 클릭하여 상품 구매 시, 파트너스 활동에 대한 소정의 수수료를 지급받습니다. 구매자에게 추가로 부과되는 수수료는 없습니다.
  • 휘Hwi
    휘: 끝나지 않은 이야기
    휘Hwi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기록
        • 일상 에세이
        • 인사이트
        • 투자와 재테크
        • 코인 이야기
        • 아카이빙
        • 집무실 레터
        • 사랑에 대하여
        • 번역 이야기(完)
        • 프리랜서 일지(完)
      • 여행
        • 🌎 세계 여행기 S1 (完)
        • 🌊 삼삼한 여행기 (完)
        • 🚶 온더로드
        • 🇯🇵 일본
        • 🏝️ 발리
        • 🇻🇳 베트남
        • 🇱🇰 스리랑카
        • 🇮🇳 인도
        • 🇹🇭 태국
        • 🇸🇬 싱가포르
        • 🇦🇺 호주
        • 🇭🇰 홍콩
        • 🇰🇷 한국
        • 🍚 여행자의 한 끼
        • ℹ️ 여행 정보
      • 사진
        • 사진가
        • 사진 이론과 생각
        • 사진 관련 정보
      • 영상
        • 파이널컷 모션 공부
        • 고프로 GoPro
        • 영상 관련 정보
      • 책
        • 책 읽고 쓰기
      • 개발
        • 티스토리
        • Internet
        • HTML
        • CSS
        • JavaScript
        • Typescript
        • React
        • Node.js
        • Express
        • NestJS
        • Python
        • Django
        • MySQL
        • MongoDB
        • AWS
        • Deployment
        • Terminal
        • Git
        • Glossaries
        • Articles
        • Projects
        • TIL;
      • 미분류
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
휘Hwi
[WebSocket/Socket IO] 채팅 서비스 구현 6. 채팅방 알림 전송하기
상단으로

티스토리툴바