Project using node.js/Cloning Catch-Mind

Client가 서버의 변수 공유하기

Cog Factory 2020. 12. 14. 14:20

socketIO

// server.js

import socketIO from "socket.io";
import { socketController } from "./socketController";

const server = app.listen(PORT, handleListening);
const io = socketIO(server);

io.on("connection", (socket) => socketController(socket, io));

export default io;

socket.io는 브라우저와 서버가 실시간으로 event 기반으로 양방향 통신을 할 수 있게 하는 라이브러리다.

// socketController.js

export const socketController = (socket, io) => {};

이 모듈은 Client로부터 오는 event들을 처리하는 모듈이다. 앞으로 Client가 emit 같은 것으로 데이터를 전송할 때 socket.on이나 io.on으로 데이터를 받는다.

Server의 변수를 Client에서 global하게 사용하기

// events.js

const events = {
  newUser: "newUser",
  addPlayer: "addPlayer",
};

export default events;

socket에 사용될 event 목록이다.

import events from "../events";
import io from "../server";

const superBroadcast = (event, data) => io.emit(event, data);

export const home = (req, res) => {
  try {
    res.render("home", { pageTitle: "home", events: JSON.stringify(events) });
  } catch (error) {
    console.log(error);
  }
};

home을 보면 events: JSON.stringify(events)가 있다. events(key)에 JSON 형식의 events(value)를 보내면 Client는 밑에 script. {개행} window.events = !{events}로 값을 받을 수 있다.

// main.pug 일부

script.
      window.events = !{events}
script(src="/socket.io/socket.io.js")
script(src="/static/js/main.js") 

참고자료

소스 코드

github.com/zpskek/guessMind-v3/commit/74dbbe75ee74d5e06d7366e3ba560bc1ebe27b53