실시간/Socket IO

2. Socket IO 설치

sdafdq 2023. 10. 27. 18:07

npm i socket.io

 

설치하고, 이제 사용해 보자.

 

기존에 사용하던 websocket 지우고, socket.io를 사용할 것이다.

 

const server = http.createServer(app);
const wss = new WebSocketServer({server});

기존에 이렇게 http 서버를 웹소켓으로 감싸면서 둘이 연결하였다.

 

socket.io도 마찬가지 이다.

 

const server = http.createServer(app);
const io = SocketIO(server);

이렇게 하고 사용하면 된다.

 

이렇게 하면, 또 하나 자동으로 만들어지는 url이 있다.

http://localhost:3000/socket.io/socket.io.js

이 url인데, 이게 뭐냐면,

클라이언트에게도 Socket.IO를 설치해 줄 필요가 있어서 그 코드를 보내주는 거다.

저거를 이제 클라이언트 app.js에서 import 해서 쓰면 된다.

import SocketIO from 'http://localhost:3000/socket.io/socket.io.js';

이런 식일듯?

Socket.IO는 외부 라이브러리 인가 보다. websocket API는 자바스크립트 공식 지원 API이고.

 

그럼 이미 서버쪽에선 설치를 했고, 클라이언트에서 그렇게 import해서 설치하면 양쪽 다 설치되는 상태가 된다.

 

 

이제는, 전처럼 한 서버에서 모두에게 message를 전하는 게 아니라, room을 만들어 room 안의 사람들 끼리 소통하게 할 것이다.

 

일단 클라이언트에게도 socketIO를 설치하게끔 하려면,

script(src="/socket.io/socket.io.js")

이렇게 그냥 문서에 cdn처럼 가져오면 된다.

 

 

 

import express, { json } from "express";
import http from "http";
import SocketIO from 'socket.io'

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

const handleListen = () => console.log(`Listening on http://localhost:3000`);

const server = http.createServer(app);
const io = SocketIO(server);

io.on("connection", socket =>{
  console.log(socket);
})

server.listen(3000, handleListen);

서버.

소켓 하면서 추가된 부분은

 

import SocketIO from 'socket.io'

const io = SocketIO(server);

io.on("connection", socket =>{
  console.log(socket);
})

이렇게 세 부분.

소켓 가져오고,

SocketIO로 httpServer 감싸는 건 이전과 똑같이 소켓과 http server를 결합하는 방법이고,

io.on("connection", (sc)=>)

이거는 연결되었을 때 이벤트

 

 

클라이언트 문서

doctype html
html(lang="en")
  head
    meta(charset="UTF-8")
    meta(name="viewport", content="width=device-width, initial-scale=1.0")
    link(rel="stylesheet", href="https://unpkg.com/mvp.css")
    title Noom
  body 
    header 
      h1 Noom!
    main 
    
    script(src="/socket.io/socket.io.js")
    script(src="/public/js/app.js")

cdn처럼 만들어지는 url로 socket을 가져옴.

 

 

그럼 이제 저걸 사용하여 클라이언트 -> 서버로 소켓 연결

const socket = io();

app.js

이거 한줄임.

저렇게 하면 알아서 찾아서 서버 연결해 줌.

알아서 생기는 저 socket.io.js 저기에 뭔가 있나봄.

 

 

'실시간 > Socket IO' 카테고리의 다른 글

6. 닉네임  (0) 2023.11.01
5. 알림  (0) 2023.10.31
4. 방 만들기  (0) 2023.10.31
3. SocketIO 기능  (0) 2023.10.30
1. Socket IO  (0) 2023.10.27