티스토리 뷰

반응형

소켓 프로그래밍에서 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에서 연결 끊김을 방지할 수 있습니다. 하지만, 연결을 끊어버리는 기능은 보안상의 이유로 필요한 조치이기 때문에, 연결 끊김을 방지하는 방법을 선택할 때에는 보안 측면도 함께 고려해야 합니다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함