WebSocket&Socket.io

채동기·2022년 11월 28일
0

websocket

목록 보기
1/2

WebSockt이란?

WebSocket은 ws 프로토콜을 기반으로 클라이언트와 서버 사이에 지속적인 완전 양방향 연결 스트림을 만들어 주는 기술입니다.

특징

양방향 통신(Full-Duplex)이 가능하다.
실시간 네트워킹(Real Time-Networking)이 가능하다.

웹소켓 (WebSocket) 구현 예제

소켓은 양방향 연결이기 때문에 서버와 클라이언트측에서 같이 구현을 해야합니다. 이번 예제는 Node.js를 이용해 서버를 구성하겠습니다.
먼저 Node.js에서 표준 웹소켓을 구성하려면 ws 패키지를 사용하면 됩니다.

$ npm install ws

다음은 간단한 서버측 예제입니다.

const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 3000 })
wss.on('connection', ws => {
  ws.on('message', message => {
    console.log('received: %s', message)
  })
  ws.send('something')
})

다음은 클라이언트측 입니다. 웹소켓은 HTML5 모듈이기 때문에 클라이언트 측에서는 따로 모듈을 설치할 필요가 없습니다.

const ws = new WebSocket('ws://localhost:3000')
ws.on('open', () => {
  ws.send('something')
})
ws.on('message', data => {
  console.log(data)
})

socket.io란?

WebSocket과 같이 클라이언트와 서버의 양방향 통신을 가능하게 해주는 모듈입니다. socket.io는 통신을 시작할 때, 각 브라우저에 대해서 websocket, pooling, streaming, flash socket 등에서 가장 적절한 방법을 찾아 메시지를 보내줍니다. 그 덕분에 socket.io를 통해 개발을 하면 websocket이 지원이 되지 않는 브라우저에서도 메시지를 양방향으로 주고 받을 수 있습니다.

Socket.io 구현 예제

먼저 Node.js에서 socket.io를 사용하기 위해 패키지를 설치해줍니다.

npm install socket.io

다음은 서버 측 예제입니다.

const server = require('http').createServer()
const io = require('socket.io')(server)
io.on('connection', socket => {
  socket.on('message', msg => {
    console.log(msg)
  })
})
server.listen(3000)

만약 서버에서 express를 사용하고 있다면 이렇게 사용하면 됩니다.

const app = require('express')()
const server = require('http').createServer(app)
const io = require('socket.io')(server)
io.on('connection', socket => {
  /* … */
})
server.listen(3000)

다음은 클라이언트 측 예제입니다. 아까 말했듯이 socket.io로 구성된 서버에겐 반드시 socket.io-client 패키지로 연결을 시도해야합니다.
패키지를 설치합니다.

npm install socket.io-client

다음은 자바스크립트 예제입니다.

const io = require('socket.io-client')
const socket = io('http://localhost:3000')
socket.emit('message', 'hello world!')

WebSocket vs Socket.io

WebSocket

HTML5 웹 표준 기술
매우 빠르게 작동하며 통신할 때 아주 적은 데이터를 이용함
이벤트를 단순히 듣고, 보내는 것만 가능함

Socket.io

표준 기술이 아니며, 라이브러리임
소켓 연결 실패 시 fallback을 통해 다른 방식으로 알아서 해당 클라이언트와 연결을 시도함
방(room) 개념을 이용해 일부 클라이언트에게만 데이터를 전송하는 브로드캐스팅이 가능함

무엇을 사용해야하는가?

서버에서 연결된 소켓(사용자)들을 세밀하게 관리해야하는 서비스인 경우에는 Broadcasting 기능이 있는 socket.io을 쓰는게 유지보수 측면에서 훨씬 이점이 많다고 합니다.
반면 가상화폐 거래소같이 데이터 전송이 많은 경우에는 빠르고 비용이 적은 표준 WebSocket을 이용하는게 나을 수도 있습니다.실제로 업비트나 바이낸스 소켓 API를 사용해보면 정말 엄청나게 많은 데이터가 들어옵니다.

참조

https://www.peterkimzz.com/websocket-vs-socket-io/

profile
what doesn't kill you makes you stronger

0개의 댓글