먼저 소켓이란?
일종의 통신으로 서버와 클라이언트 간에 양방향 연결이 이루어지는 통신이다.
이 말은 서버에서 클라이언트로, 그리고 클라이언트에서 서버로도 요청하고 수신될 수 있는 특성을 가진다.
양방향이기에 실시간으로 값이 갱신,변경,출력될때 사용된다 (주식,코인,쇼핑몰 구매자알림,실시간 채팅방 등)
우선 노드js에서 소켓을 설치해 준다.
아래는 설치 명령어!
npm install socket.io -S
const express = require("express");
const { Op } = require("sequelize");
const jwt = require("jsonwebtoken");
const { User, Cart, Goods } = require("./models");
const authMiddleware = require("./middlewares/auth-middleware");
const { Server } = require("http");
const socketIo = require("socket.io");
const app = express();
const http = Server(app);
const io = socketIo(http);
const router = express.Router();
app.use(express.static("assets"));
app.use(express.json());
io.on("connection", (sock) => {
// 소켓 사용자가 연결되었을때
console.log("새로운 소켓이 연결되었습니다.");
// io.emit("BUY_GOODS" , {
// nickname: '서버가 보내준 구매자 닉네임',
// goodsId: 10, // 서버가 보내준 상품 데이터 고유 ID
// goodsName: '서버가 보내준 구매자가 구매한 상품 이름',
// date: '서버가 보내준 구매 일시'
// }); // 테스트용 코드기 때문에 지워도됨
sock.on("BUY", (data) => {
console.log(data);
const emitData = {
// 데이터를 전달해야하기에 객체로 만들어준다.
nickname: data.nickname,
goodsId: data.goodsId,
goodsName: data.goodsName,
date: new Date().toISOString(),
};
io.emit("BUY_GOODS", emitData); // 서버와 연결된 모든 클라이언트에게보냄(buy_goods라는 이벤트를 전달할거고 emitData라는 값을 전달할거다)
}); // 만약 특정 사용자가 우리서버에 buy이벤트를 통해 데이터를 전달하게 된다면 해당 코드가 실행되도록
sock.on("disconnect", () => {
// 소켓 사용자가 연결이 끊어졌을때(새로고침이나 로그아웃 등)
console.log(sock.id, "<의 사용자의 연결이 끊어졌습니다.");
});
});
http.listen(8080, () => {
console.log("서버가 요청을 받을 준비가 됐어요");
});
그 다음 express 모듈을 사용하여 서버를 실행하는데
const socketIo = require("socket.io");
const io = socketIo(http);
이 명령어는 웹 소켓을 사용하는 코드이다.
웹 소켓은 기본적으로
socket.emit('소켓이름','보낼 데이터')로 데이터를 송신하며,
socket.on('소켓명',function(data)//보낸 데이터)로 수신하는 단순한 구조이다.
그리고 서버 쪽 코드는 다음과 같다.
io.on("connection", (sock) => {
console.log(sock.id, '연결');
sock.emit("BUY", sock.id + '서버에서 클라이언트로 연결되었습니다.')
sock.on("BUY", (data) => {
console.log(sock.id,data);
sock.emit("BUY",`Server가 ${data}를 받았습니다.`)
});
});
서버에서 클라이언트로 연결될땐 buy 소켓명 서버에서 클라이언트로 연결되었습니다. 출력
클라이언트에서 서버로 연결될땐 buy server가 ${data}를 받았습니다 를 전송하는 구조이다.
이것으로 socket 의 기본 설정을 해보았다.