[Node.js] Socket.io

아는벌·2023년 2월 21일
0

web (2)

목록 보기
3/20

socket.io

소켓 통신

서버-클라이언트 양방향 연결으로 이루어지는 통신

소켓 기본

npm install socket.io --save
터미널에서 위 코드로 socket.io 모듈을 설치한다.

const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);

서버 측에 socket.io 사용을 위한 모듈을 생성한다.

io.on('connection', (socket) => {
  console.log('a user connected');
});

소켓을 연결하는 connection 이벤트 발생 시 socket 객체가 인자로 전달되고 socket 객체는 개별 클라이언트와의 통신하는 기본 객체이다. io 객체는 연결된 전체 클라이언트와 통신을 위한 객체이다.
connection 이벤트 발생 시 클라이언트가 전송한 메세지를 수신하거나 클라이언트에게 메세지를 송신한다.

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server);

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
  console.log('a user connected');
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

socket.io를 사용하는 서버의 기본 코드이다

socket.emit('소켓명', '데이터') - 데이터 송신
socket.on('소켓명','데이터') - 데이터 수신

emit 메소드로 데이터를 송신하고 on 메소드로 데이터를 수신할 수 있다,

on 메소드

// 클라이언트가 socket으로 접속하면 실행
io.sockets.on("connection", (socket)=>{
  console.log("소켓으로 접속 됨.");
  socket.emit('news',"hello world");
  socket.on('hi', (data)=>{
    console.log("data => " + data);
  });

  // private messages 
  socket.on("private message",(from, msg )=>{
    console.log('from => '+from + " msg => " + msg);
  });

  // 접속이 끊어졌을 때 실행
  socket.on("disconnect", function(){
    console.log("접속이 끊어짐");
  });
});

on 메소드를 사용하여 클라이언트가 전송한 메세지를 수신할 수 있다.

emit 메소드

1) 접속된 모든 소켓에 메세지 전달

io.sockets.emit("this",{will : "be received by "});

2) 메세지를 전송한 클라이언트에게만 메세지 전달

socket.emit("private message",{msg : "hello"});

3) 메세지를 전송한 클라이언트를 제외한 모든 클라이언트에게 메세지를 전송

socket.broadcast.emit("boroadcast", {msg : "hello"});

4) 특정 클라이언트에게만 메세지 전달
id는 socket 객체의 id 속성값이다.

io.to(id).emit("toid", {msg : "hello"});

클라이언트 측

<script src="https://cdn.socket.io/4.5.4/socket.io.min.js"></script>

클라이언트에서는 socket.io CDN을 사용하여 var socket = io(); socket.io 서버에 접속한다

// socket.io 서버에 접속
var socket = io();
// 서버로 메세지 받기
socket.on('this', function(data){
   console.log(data);
   console.log(data.will);
});
// 서버로 메세지 보내기
socket.emit('private message',"나","thanks");

클라이언트 측 코드이다. 클라이언트에서도 서버와 같이 socket.on() 메소드로 서버로부터 메세지를 받고 socket.emit() 메소드로 메세지를 보낸다.

실습

일대일 채팅 구현하기

참고

https://poiemaweb.com/nodejs-socketio

0개의 댓글