• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

PM2 + socket io 질문

21.12.19 10:03 작성 조회수 901

0

제로초님 강의듣고 나름 열심히 만든앱 채팅입이

어제부터 동접자 7~8000명을 찍고 서버가 터진뒤

오늘 기세보니 만명을 찍을것같습니다.

우선 정말 감사드립니다.

그러나 현재 서버가 불안정해서 열심히 알아본결과

PM2 + socket.io를 사용하는게 지금 제가 빠르게 할 수있는방법으론 젤 괜찮을 것같아 해봤습니다.

공식문서 보고 따라했습니다.

npm remove -g pm2

npm install -g @socket.io/pm2

를 실행하고

socket.js

...

const SocketIo = require("socket.io");

const { createAdapter } = require("@socket.io/cluster-adapter");const { setupWorker } = require("@socket.io/sticky");

 module.exports = (server) => {

     const io = SockeIo(server, {path: '/socket.io})

io.adapter(createAdapter());

setupWorker(io);

....

}

이렇게 코드를 작성한뒤  package.json에 "start": "cross-env NODE_ENV=production pm2 start app.js -i 0"

이렇게하고 npm start를 하면 실행이 되지않습니다.

점검한다고 2시간가량 공백시간을 두었지만

결국 해결못하고 다시 하나의 cpu로 pm2 를 실행시켰습니다.

기세보니 오늘 동접자 만명 가까이 될듯한데, 정말 무섭습니다.

aws 서버는 t3.xl 쓰고있고 프론트(앱), 백앤드(서버+db) 이렇게 2티어 구조 쓰고있습니다.

pm2 clustering 만 어떻게 해결하면 문제없이 받아낼 수 있을것같은데, 어떻게 하면 해결할 수 있을까요.. ㅠㅠ

사적인 질문 너무 죄송하지만 너무 급해서 질문드립니다.. 답변해주시면 정말 감사하겠습니다.

답변 3

·

답변을 작성해보세요.

0

노른자님의 프로필

노른자

질문자

2021.12.19

감사합니다. 저녁에 서버 터질것같으니 그때 종료되는김에 한번 해보겠습니다.

https://socket.io/docs/v4/pm2/

근데 위 문서보면 서버 호스트가 하나라면 redis없이 @socket.io/pm2 과 socket io 모듈로 가능할 것 같은데

 

처음에 따라했을땐 기존에 npm i pm2로 설치했었던것을 npm uninstall pm2를 하지않고 글로벌로 설치하지도 않았던npm remove -g pm2를 하고

npm i -g  @socket.io/pm2 를 해서 pm2 start app.js -i 0 을 했을때

실행되지 않았던것인가~ 라고 생각도 듭니다.

그래서 다음에 해볼떈 우선 npm uninstall pm2 하고 npm remove -g pm2  npm remove -g @socket.io/pm2 하고 sudo로도 세개 반복해보고 난 다음 다시 해보려고하는데,

 

위 문서대로하면 가능한것 맞나요??

0

노른자님의 프로필

노른자

질문자

2021.12.19

redis 를 통한 방법도 있던데 한컴퓨터인데 redis가 해결방안이 맞는지도 모르겠고... 난감합니다

redis가 해결방안입니다. 클러스터링할 때 redis 도입하셔야합니다.

그리고 실행 시 어떤 에러가 뜨는지 확인하시고요. socket.io는 new 붙이지마세요.

0

노른자님의 프로필

노른자

질문자

2021.12.19

그리고 혹시 공식문서랑 달라서 안되나하고

const io = SockeIo(server, {path: '/socket.io}) 부분을

cosnt io = new SocketIo(server) 이렇게 바꿔봤는데,

실행은되는데 SocketIo is not constructor 이라는 에러가 뜹니다.