socket.io(2)_simpleChat

김종민·2022년 12월 9일
0

mern-Chat

목록 보기
2/5

들어가기
socket.io의 두번째 파트로
client->server->client로
data가 전송되는 과정을 잘 확인한다.


1. index.html

<!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" />
    <title>Simple Live Chat App</title>
    <!-- CSS only -->
    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
      rel="stylesheet"
      integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65"
      crossorigin="anonymous"
    />
    ///chat Layout을 간단히 하기 위해서 bootstrap를 import 함.
  </head>
  <body>
    <h1>Hello Love Chat</h1>
    <h2 id="msg"></h2> 
    ///document.getElementById로 받은 message를 뿌려줄 예정.
    <br />
    <br />

    <div class="container">
      <div class="row d-flex justify-content-center">
        <div class="'col-md-6 col-12 col-lg-6">
          <div class="input-group">
            <ul id="msgHis"></ul>
            ///채팅 메세지를 뿌려줄 html부분.
            
          </div>
        </div>
      </div>
    </div>

    <div class="container">
      <div class="row d-flex justify-content-center">
        <div class="'col-md-6 col-12 col-lg-6">
          <div class="input-group">
            <input id="msg" class="form-control" type="text" />
            ///채팅 메세지 입력칸
            
            <button onclick="sendMsg()" class="btn btn-info">Send Data</button>
            ///메세지 보내는 버튼. sendMsg()함수는 아래에 
            ///script로 만들어 줄 예정.
            
          </div>
        </div>
      </div>
    </div>

    <script src="/socket.io/socket.io.js"></script>
    ///socket을 client에서 사용하기 위해 가장 먼저 import
    ///해야 할 부분.
    
    <script>
      let socket = io()
      ///sokcet instance를 맨 먼저 만들어줌.

      //Make Room
      socket.on('cooking', (data) => {
        document.getElementById('msg').innerHTML = data
      })
      ///cooking으로 emit되는 data를 html의 msg칸에
      ///뿌려줌.

      //Chat
         function sendMsg() {
           let msg = document.getElementById('msg').value
           socket.emit('chat', msg)
          // alert(msg)
         }
         ///client에서 chat이라는 key로 html의 input창에서 
         ///입력한 값을 msg로 받아서
         ///server쪽으로 날려줌.(emit)

         socket.on('chat_send', (msg) => {
           let listItem = document.createElement('li')
           ///li 태그를 listItem으로 만듬
           listItem.textContent = msg
           ///listItem에 server에서 받은 메세지를 넣어줌.
           let msgHis = document.getElementById('msgHis')
           ///위의 ul태그의 id인 msgHis를 get함.
           msgHis.appendChild(listItem)
           ///msgHis(ul태그)에 server에서 받은 메세지를 뿌려줌
         })
         ///sendMsg() 함수로 server쪽으로 날린 메세지를
         /// server쪽에서 다시 client에게로 다시 날린
         /// 메세지를 client에서 받아서 화면에 뿌려줌
         
    </script>
  </body>
</html>

index.js

const express = require('express')
const app = express()
const http = require('http')

const expressServer = http.createServer(app)

const { Server } = require('socket.io')
const io = new Server(expressServer)
///중복부분은 설명 생략함.

//Make Room
io.on('connection', (socket) => {
  socket.join('kitchen-room')
  ///'kitchem-room'이라는 room을 만들어 이 방
  ///접속자에게만 msg를 날린다는 뜻
  
  let sizeOfKitchen = io.sockets.adapter.rooms.get('kitchen-room').size
  ///'kitchen-room'접속자 수를 conunt함.
  
  io.sockets.in('kitchen-room').emit('cooking', 'fried Cooking' + sizeOfKitchen)
  ///kitchen-room에 접속한 사람들 중에
  ///'cooking'이라는 key로 메세지 및 방 접속자 수를 날려줌.
  
  io.sockets.in('kitchen-room').emit('boiling', 'bliling water')
  ///kitchen-room에 접속한 사람들에게 'boiling'이라는 key로
  ///메세지를 날려줌.

  socket.join('bed-room')
  io.sockets.in('bed-room').emit('sleep', 'I am sleeping')
  io.sockets.in('bed-room').emit('rest', 'I am resting')
  ///'bed-room'을 만듬
  ///'bed-room'에 들어온 사람들 중에
  /// 'sleep' , 'rest'등의 key로 msg를 날려줌.
})

//Chat

 io.on('connection', (socket) => {
   console.log('New User Connected')
   socket.on('chat', (msg) => {
     console.log(msg)
     io.emit('chat_send', msg)
   })
   ///socket.on으로 client에서 보낸 메세지를 받아서
   ///io.emit로 다시 client에 메세지를 보내줌.
   ///받을때 key는 chat, 보낼떄 key는 chat_send
 })

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html')
})
///'/'path로 req가 오면, index.html을 뿌려주겠다는 뜻.

expressServer.listen(3000, () => {
  console.log('Server is running at Port 3000')
})

profile
코딩하는초딩쌤

1개의 댓글

comment-user-thumbnail
2024년 5월 2일

It is very easy to schedule your meeting with Horny Vishnu Garden Esscort you just need to call on the number that we mentioned on our page. Also, if you want a complete Escort in Vishnu Garden then you can take reference from our Vishnu Garden sex guide that will help you to know more deeply about it.

답글 달기