ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • socket.io ( node.js )
    자료 정리 2020. 2. 25. 21:00
    const app = require('express')();
    const socketIo = require("socket.io");
    const io = socketIo.listen(app.listen(4000));
    
    io.sockets.on('connection', function (socket) {
            console.log("연결 성꽁");
        });

    프로젝트를 진행 할 때 socket.io를 사용하여 방마다 채팅방을 만들어 방에 참여한 사람들과 함께 채팅을 할 수 있는 기능을 넣어야 했었다. 하지만 소켓을 사용해 보는 것은 처음이여서 공부를 해봐야겠다는 생각이 들었습니다.

    socket.io란? 

     websocket을 간단히 이해해면 더 쉽게 socket.io를 이해할 수 있습니다.

    websocket이란?

    기존의 HTTP는 클라이언트의 요청->서버의 응답(polling 방식)의 형식의 통신이였습니다.

    하지만 채팅같은 기능과 같이 동적인 기능을 구현하기 위해 양방향 통신 기술이 필요해지기 시작하였고 

    HTTP를 이용하여 양방향 통신과 비슷하게 구현은 하였지만, 이러한 방식은 HTTP 교환 규칙을 어기고 구현하기 어렵기 때문에  websocket이 등장하였습니다.

    Stromae - carmen

    Polling, websocket

    그럼 socket.io는 어떤 것일까요?

    socket.io는 브라우저와 서버간의 실시간 통신을 가능하게 해주는 Node.js에서 제공하는 라이브러리입니다. socket.io는 websocket의 사용을 단순화하여 사용할 수 있고 websocket을 지원하지 않는 브라우저 같은 경우에는 다른 프로토콜을 이용하여 문제를 해결합니다.

    socket.io

    node.js 서버

    npm socket.io

    일단 socket.io를 npm으로 설치합니다.

    const app = require("express")();
    const socketIo = require("socket.io");
    const io = socketIo.listen(app.listen(4000));
    
    io.on("connection", (socket) => {
      console.log("연결 성공");
      socket.on("disconnect" , () => {
         console.log("연결 끊기");
       })
    })

     

    클라이언트가 socket 서버와 연결이 되면 콘솔 값이 찍힌다. 인자로는 socket이 들어온다.

    socket에서 이루어지는 이벤트는 위에 connection 안에서 이루어져야 한다.

    const app = require("express")();
    const socketIo = require("socket.io");
    const io = socketIo.listen(app.listen(4000));
    
    io.on(이벤트 이름, 콜백 함수);
    
    이벤트 이름 => 클라이언트와 지정한 이름
    콜백 함수 => 인자로 들어가는 data는 클라리언트에서 주는 데이터가 들어간다.

     

    서버가 클라이언트에 메세지 송신

    .emit('eventname', 콜백함수);

     

    // 접속된 모든 클라이언트에게 메세지 전송한다
    io.emit('eventname', msg);
    
    // 메시지를 전송한 클라이언트에게만 메세지 전송한다
    socket.emit('eventname', msg);
    
    // 메시지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메세지를 전송한다
    socket.broadcast.emit('eventname', msg);
    
    // 방에 입장하기
    socket.join(id : 방의 아이디);
    // 특정 방에 들어가있는 클라이언트에게만 메시지를 전송한다
    io.to(id).emit('eventname', msg);
    //방에서 나가기
    socket.leave(id);

    '자료 정리' 카테고리의 다른 글

    axios 와 fetch의 다른 점  (0) 2020.02.29
    Sequelize 1 : N 관계 설정, Cascade 적용  (0) 2020.02.26
    let, const , var 비교 분석  (0) 2020.02.21
    Javascript의 장, 단점  (0) 2020.02.20
    scope 란  (0) 2020.02.20

    댓글

Designed by Tistory.