개발일지

개발일지 28일차

2023. 4. 14. 01:14
목차
  1. socket.io
  2. Websocket
  3. app.js
  4. 버튼 클릭시 서버로 form의 value 전송
  5. input에 데이터입력
  6. server.js
  7. 클라이언트에서 보낸 value 서버에서 받기

socket.io

- socket.io를 사용하여 Real-Time-communication 구현하기

Websocket

- WebSocket은 사용자의 브라우저와 서버 사이의 동적인 양방향 연결 채널을 구성하는 프로토콜이다 WebSocket API를 통해 서버로 메시지를 보내고 요청없이 응답을 받는것이 가능하다. 

- 서버의 데이터를 클라이언트에 즉시 전달할 수 있는 실시간 애플리케이션 (채팅앱 등)에 효과적인 프로토콜이다

- socket.io: socket.io는 실시간 채팅기능이 구현 가능한 frame work이다 WebSocket의 부가기능이 아니다, 

HTTP long Polling 방식을 사용하여 지연없이 메시지를 전달한다.

app.js

- 클라이언트에서는 form을 submit 했을때 실행하는 함수를 선언하고 form에 입력된 value 값을 서버로 보내는 기능을 구현하였다.

//백엔드와 프론트엔드 연결하기
const socket = io()

//방 개념
const welcome = document.querySelector("#welcome")
const form = welcome.querySelector("form")

function handleRoomSubmit(e) {
    e.preventDefault();
    const input = form.querySelector("input")
    //room 이벤트 emit 파싱 필요없음. 
    //emit(이벤트 , 보내는 내용, 서버에서 호출하는 함수)
    //백엔드로 보낼때 자동으로 obj => json으로 변환
    //백엔드로 보낼떄 첫번째 인자는 이벤트이름 백엔드와 같아야함. string 타입
    //callback함수는 꼭 마지막 인자로 넘겨준다!
    //backend에서 함수를 실행하는 것이 아니라
    //frontend에게 이 함수를 실행해! 라고 알려주고 frontend에서 실행한다!
    socket.emit("enter_room", { text: input.value }, () => {
        console.log("server is done")
    })
    input.value = ""
}

form.addEventListener("submit", handleRoomSubmit)

버튼 클릭시 서버로 form의 value 전송

  const input = form.querySelector("input")
    //room 이벤트 emit 파싱 필요없음. 
    //emit(이벤트 , 보내는 내용, 서버에서 호출하는 함수)
    //백엔드로 보낼때 자동으로 obj => json으로 변환
    //백엔드로 보낼떄 첫번째 인자는 이벤트이름 백엔드와 같아야함. string 타입
    //callback함수는 꼭 마지막 인자로 넘겨준다!
    //backend에서 함수를 실행하는 것이 아니라
    //frontend에게 이 함수를 실행해! 라고 알려주고 frontend에서 실행한다!
    socket.emit("enter_room", { text: input.value }, () => {
        console.log("server is done")
    })
    input.value = ""

- socket.emit메서드를 사용해 emit의 첫번째인자로 "이벤트의 이름" 두번째 인자로 전송할 데이터, 세번째 인자로 실행할 함 수를 넣을 수 있다 데이터의 타입은 모든 데이터의 타입을 넣을 수 있다. socket.io의 기능에서 객체를 자동으로  JSON으로 파싱하여 서버로 넘겨주는 기능이 있다.

 - callback함수는 꼭 마지막 인자로 넘겨준다!
 - backend에서 함수를 실행하는 것이 아니라
 - frontend에게 이 함수를 실행해! 라고 알려주고 frontend에서 실행한다!

 socket.emit("이벤트이름", 전송할 데이터, 실행할 함수)

input에 데이터입력

- input에 안뇽이라는 값을 입력하고 Enter Room버튼을 눌러 서버로 전송하면 서버로  { text: "안뇽" } 이라는 객체 데이터가 서버로 넘어간걸 확인할 수 있다.

- 터미널창에 입력된 value값 확인

server.js

- 클라이언트에서 전송한 데이터 wsServer변수로 받기

import http from "http"
//서버에서 웹소캣 실행
import SocketIO from "socket.io"
import express from "express"


const app = express();

app.set("view engine", "pug")
app.set("views", __dirname + "/views")
app.use("/public", express.static(__dirname + "/public"));
app.get("/", (req, res) => res.render("home"));

const httpServer = http.createServer(app)
//io 변수에 server 보내기
const wsServer = SocketIO(httpServer)

//프론트에서 connection 받기
wsServer.on("connection", socket => {
    //room 이벤트로 프론트에서 받음 첫번째 인자로 이벤트를 넣음
    //프론트에서 받은 이벤트이름과 같은이름 , string 타입
    socket.on("enter_room", (msg, done) => {
        console.log(msg)
        setTimeout(() => {
            done()
        }, 5000)
    })
})

const handleListen = () => console.log(`Listening on local3000`)
httpServer.listen(3000, handleListen)

클라이언트에서 보낸 value 서버에서 받기

- 클라이언트에서 socket.emit("enter_room") 이벤트에 태워서 보낸 데이터를 socket.on("enter_room")에서 받아 

console.log(msg)로 받은 데이터를 출력한다. 

wsServer.on("connection", socket => {
    //room 이벤트로 프론트에서 받음 첫번째 인자로 이벤트를 넣음
    //프론트에서 받은 이벤트이름과 같은이름 , string 타입
    socket.on("enter_room", (msg, done) => {
        console.log(msg)
        console.log(msg.text)
        setTimeout(() => {
            done()
        }, 5000)
    })
})

인자 msg에 input에서 받은 데이터가 들어 있어 key값으로 value에 접근할 수 있다.

- 이때 setTimeout함수로 done()이라는 함수를 실행시켜 서버가 아닌 클라이언트에서 console.log("server is done")를

실행하게 한다

노마드 코더의 WebSocket강의를 들으면서 서버와 클라이언트가 통신하는 방식에 대해 좀 더 이해하려고한다. http와 ws프로토콜의 차이점을 이해하고, socket.io를 어떤방식으로 활용하면 좋을지에 대해서도 생각해보면 좋을것 같다. 

soecket.io를 사용하지 않았을때 데이터의 타입을 어떻게 파싱해야 하는지에 대해서도 깊게 생각해봐야겠다(JSON.Stringify()), (JSON.parse)

'개발일지' 카테고리의 다른 글

내가보려고 만든 git명령어  (0) 2023.04.15
개발일지 29일차  (0) 2023.04.14
개발일지 27일차  (0) 2023.04.13
VS Code 소스제어 10K 없애기  (0) 2023.04.12
개발일지 26일차  (3) 2023.04.12
  1. socket.io
  2. Websocket
  3. app.js
  4. 버튼 클릭시 서버로 form의 value 전송
  5. input에 데이터입력
  6. server.js
  7. 클라이언트에서 보낸 value 서버에서 받기
'개발일지' 카테고리의 다른 글
  • 내가보려고 만든 git명령어
  • 개발일지 29일차
  • 개발일지 27일차
  • VS Code 소스제어 10K 없애기
index.ys
index.ys
머리속에 떠도는 코드조각들을 맞추는 공간입니다.
index.ys
코린이 개발일지
index.ys
전체
오늘
어제

공지사항

블로그 메뉴

  • 홈
  • 방명록
  • Github
  • Notion
  • Figma
  • 타닥타닥 (235)
    • 개발일지 (124)
    • html , css (0)
    • Javascript (30)
    • Node.js (8)
    • React (2)
    • 네트워크 (1)
    • DB, SQL (5)
    • AWS (11)
    • CS (21)
    • 면접 (13)
    • 사진 (4)
    • 북로그 (3)
    • 머릿속 (5)

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
index.ys
개발일지 28일차
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.