webRTC 지옥편

최예닮·2022년 11월 28일
0
post-thumbnail

지옥의 RTC 반복훈련이다...

오늘 팀원과 하루종일 P2P형태로 webRTC를 연결해보고 있는데 answer까지는 잘 넘어오지만 .... candidate가 정말 ... 어쩔때는 되고 어쩔때는 안되고 있어서 지금 우리는 절망에 빠져있다.

"박경위님... 그 곳에서 webRTC는 잘되고 있습니까...?"

하... 우선 우리 깜찍한 webRTC 코드를 보여주겠다...

const app = require("./app");
const http = require("http");

const server = http.createServer(app);
const io = require("socket.io")(server, {
  cors: {
    origin: "*",
    // methods: ["GET", "POST"],
    // allowedHeaders: ["my-custom-header"],
    credentials: true,
  },
});

// 어떤 방에 어떤 유저가 들어있는지
let users = {};
// socket.id기준으로 어떤 방에 들어있는지
let socketRoom = {};

const MAXIMUM = 2;

io.on("connection", (socket) => {
  console.log(socket.id, "connection");
  socket.on("join_room", (data) => {
    console.log("join_room: ", data);
    // 방이 기존에 생성되어 있다면
    if (users[data.room]) {
      console.log("27줄", users[data.room]);
      // 현재 입장하려는 방에 있는 인원수
      const currentRoomLength = users[data.room].length;
      if (currentRoomLength === MAXIMUM) {
        // 인원수가 꽉 찼다면 돌아갑니다.
        socket.to(socket.id).emit("room_full");
        return;
      }

      // 여분의 자리가 있다면 해당 방 배열에 추가해줍니다.
      users[data.room] = [...users[data.room], { id: socket.id }];
    } else {
      // 방이 존재하지 않다면 값을 생성하고 추가해줍시다.
      users[data.room] = [{ id: socket.id }];
    }
    socketRoom[socket.id] = data.room;

    console.log("입장 !!!!", data.room);
    // 입장
    socket.join(data.room);

    // 입장하기 전 해당 방의 다른 유저들이 있는지 확인하고
    // 다른 유저가 있었다면 offer-answer을 위해 알려줍니다.
    const others = users[data.room].filter((user) => user.id !== socket.id);
    if (others.length) {
      io.sockets.to(socket.id).emit("all_users", others);
    }
  });

  socket.on("offer", (sdp, roomName) => {
    console.log("offer: ", sdp);
    console.log("offer: ", roomName);
    // offer를 전달받고 다른 유저들에게 전달해 줍니다.
    socket.to(roomName).emit("getOffer", sdp);
    console.log("61번째줄 성공");
  });

  socket.on("answer", (sdp, roomName) => {
    console.log("answer: ", sdp);
    console.log("answer: ", roomName);
    // answer를 전달받고 방의 다른 유저들에게 전달해 줍니다.
    socket.to(roomName).emit("getAnswer", sdp);
    console.log("70번째줄 성공!");
  });

  socket.on("candidate", (candidate, roomName) => {
    console.log("candidate :", candidate);
    console.log("candidate :", roomName);
    // candidate를 전달받고 방의 다른 유저들에게 전달해 줍니다.
    socket.to(roomName).emit("getCandidate", candidate);
    console.log("78번째줄 성공!");
  });
});

module.exports = { server };

수 많은 console.log를 봐주세요... 쥬륵 😭... 정말 가끔 갑자기 연결이 될때가 있다... 왜...왜지...? 그...그만해 이러다... 다 죽어...

여기서 웃겼던게 갑자기 엄청 잘될때가 있었다 어디 코드를 고쳤냐면

app.js

const express = require("express");
const app = express();
const cors = require("cors");
const connect = require("./models/index");
connect();
const expiration = require("./schedule/schedule");
const roomName = require("./socket");

const morganMiddleware = require("./middleware/morgan_middleware");
const routes = require("./routes/index.routes");
app.use(express.json());
// app.use(
//   cors({
//     origin: "*",
//   })
// );
app.use(cors());

app.use(morganMiddleware);

// scheduler 실행
expiration;

app.use("/", routes);

module.exports = app;

위 코드를 보면 app.use(cors{origin: "*", }) );

부분이 있을거다. socket.js 파일에서 cors: origin: "*" 가 들어가기 때문에 혹시 몰라서 app.use(cors()); 변경해주니까 갑자기 너무 잘되는 거 아니겠는가?!

하지만 젠장... 시간이 얼마 지나니 또 answer 까지만 대답한다... 이렇게 말이다...

진짜 눈물광광이다... 시도를 이것저것 해보고 있지만... 아직까지는... 잘 모르겠어.... 좀 더 고민하면서 프론트 분들이랑 소통하면서 해봐야겠다...

지구인들아 나에게 힘을 줘....

힘내자 힘내...

profile
산을 오르려고 하는데 이제 주차장에 막 주차한 초보개발자

0개의 댓글