티스토리 뷰
Socket.IO 연결 끊김 방지하기 - pingTimeout, pingInterval 설정 및 keep-alive 요청
예술하는 개발자 최씨 2023. 3. 28. 17:59
소켓 프로그래밍에서 Socket.IO는 매우 인기있는 라이브러리 중 하나입니다. 하지만, 기본적으로 Socket.IO는 일정 시간동안 클라이언트와 서버 간의 연결이 없을 경우 연결을 끊어버리는 기능이 있습니다. 이는 보안상의 이유로 필요한 조치이긴 하지만, 때로는 이러한 연결 끊김이 원치 않을 때도 있습니다.
그래서 이번 글에서는 Socket.IO에서 일정 시간 후에 연결이 끊어지는 것을 방지하는 방법에 대해 알아보겠습니다.
1. pingTimeout 설정 변경하기
Socket.IO에서 일정 시간동안 연결이 없으면 연결이 끊어지는 기능을 막기 위해, 클라이언트와 서버 간의 상태를 확인하기 위한 ping 이벤트를 주고 받습니다. pingTimeout은 이 ping 이벤트를 주고 받는 시간 간격을 나타내며, 기본값은 60초입니다.
따라서 pingTimeout을 더 긴 시간으로 설정하면, 연결 끊김을 방지할 수 있습니다.
const io = require('socket.io')(httpServer, {
pingTimeout: 120000 // 2분
});
2. pingInterval 설정 변경하기
pingInterval은 클라이언트가 서버에 ping 이벤트를 보내는 주기를 나타냅니다. 기본값은 25초입니다.
pingInterval을 더 자주 보내도록 설정하면, 연결 끊김을 방지할 수 있습니다.
const io = require('socket.io')(httpServer, {
pingInterval: 30000 // 30초
});
3. 클라이언트에서 keep-alive 요청 보내기
클라이언트에서 서버에 keep-alive 요청을 보내면, 연결이 끊어지지 않습니다. 이를 위해 클라이언트에서 주기적으로 서버에 ping 이벤트를 보내도록 설정할 수 있습니다.
setInterval(() => {
socket.emit('ping');
}, 20000); // 20초
4. 서버에서 클라이언트에 ping 이벤트 보내기
서버에서 주기적으로 클라이언트에 ping 이벤트를 보내면, 연결이 끊어지지 않습니다. 이를 위해 서버에서는 클라이언트에 ping 이벤트를 보내는 타이머를 만들어주는 코드를 작성할 수 있습니다.
const interval = setInterval(() => {
io.emit('ping');
}, 20000); // 20초
io.on('disconnect', () => {
clearInterval(interval);
});
위의 코드에서는 setInterval을 이용하여 20초마다 io.emit('ping')을 보내도록 설정하고, 서버에서 연결이 끊길 때 clearInterval로 해당 interval을 정리합니다.
결론
위에서 소개한 4가지 방법 중 적절한 방법을 선택하여 Socket.IO에서 연결 끊김을 방지할 수 있습니다. 하지만, 연결을 끊어버리는 기능은 보안상의 이유로 필요한 조치이기 때문에, 연결 끊김을 방지하는 방법을 선택할 때에는 보안 측면도 함께 고려해야 합니다.
'IT 한스푼' 카테고리의 다른 글
Node.js Socket.io 사용법 및 예제 코드 (0) | 2023.04.12 |
---|---|
Node.js에서 Cron 작업 예약하기: node-cron 사용법 (0) | 2023.04.05 |
MySQL을 이용한 위도 경도 거리 계산 방법과 구현 방법 (0) | 2023.04.04 |
Node.js의 비동기 처리 방식과 콜백 지옥 탈출하기 (0) | 2023.03.30 |
Node.js와 Express를 이용한 서버 캐싱 구현 방법 (0) | 2023.03.27 |
- Total
- Today
- Yesterday
- 다이어트
- 서버
- 운동
- 스포츠
- 크로스핏
- FCM
- vue.js
- 혈당 관리
- 관절염
- pm2
- 고혈압
- 라이프스타일
- Firebase Cloud Messaging
- express.js
- 건강
- 운동 효과
- node.js
- mysql
- 요리
- 건강한 식습관
- 당뇨
- socket.io
- 웹 개발
- 예방
- 체중 감량
- javascript
- 딥링크
- 관리
- 고지혈증
- 단백질
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |