프로그램

node.js 에서 reconnect callback 사용법

(주)CKBcorp., 2015. 4. 4. 06:00
반응형



말 그대로다.
여러가지 이유로 client 쪽과 server 와 연결이 끊어질 때가 있다.
이게, connect - disconnect 가 의도한대로 제어할 수 있으면 좋지만, 

1. network 이상
2. client fail
3. server fail 
4. 기타

의 이유로 ( client 쪽 기준 ) 연결이 끊어지는 경우가 있다.

프로그램이 완벽하고, 서버 / 클라이언트 모두에게 버그가 없다면 그나마 낫겠지만,

1. 서버가 죽거나, 클라이언트가 죽는데
2. 원인을 전혀 모르겠는 경우 

에는, 무작위로 connection 이 끊긴다고 가정하고 코드를 작성해야 한다. 
말이 장황해 졌는데, 예를들면 버그를 못잡은 상태에서 서비스를 할 경우...(-_-;;) 등등이 그러하다.

그래서, 이 경우는 - 여러가지 방법이 있겠지만 - client 에 방어코드를 넣는것도 방법인데... 시나리오는 이러하다.

1. 서버 - 클라이언트에 연결이 끊긴다.
2. 원인은 모른다 = 버그를 못잡겠다. 
3. 만일 서버가 죽었다면, 오류에 대응하고 서버 재실행
4. 클라이언트가 죽었다면 재실행
5. 클라이언트가 끊겼다면 재연결 

그나마 코드에서 대응하기 가장 쉬운건 5번일텐데, 이 경우는 아래와 같은 코드로 가능하다. ( 설명이 너무 길었네... )


...
socket.on('connection', function( _data ) { ... } );            // 최초 연결 성공 + callback 

socket.on('disconnect', function( _data ) { ... } );         // 연결 종료 혹은 강제로 끊겼을 때
socket.on('reconnecting', function( _data ) { ... } );         // 강제로 끊겼을 때 재시도중 - 아직 성공한 건 아님
socket.on('reconnection', function( _data ) { ... } );         // 연결 재시도 성공

1. callback 양식은 모두 같다.
connect - disconnect - reconnect 도 이미 준비된 기능과 구문이 있기 때문에, 그냥 사용하면 된다. 이 글의 핵심은 'reconnection' , 'reconnecting' 되겠다.
2. 옛날 버전 node.js 는 disconnect 되면 자동으로 reconnect 가 안 되서 추가 코드가 필요했나 본데, 지금 버전의 node.js 는 disconnect 시 reconnect 가 기본 설정값이다. 그러므로 reconnect try 는 걱정 안 해도 된다. 

끝.
말은 길었지만 간단히 이야기하면, 
1. socket.io 는 disconnect 됐을 때 알아서 reconnect try 한다.
2. reconnect try 는 'reconnecting' ( 연결 다시 시도중 ) , 'reconnection' ( 재연결 완료 ) 으로 이루어진다. 
3. 재연결 성공 후 callback 을 사용한다면, 기존에 node.js 의 socket.io 와 동일한 방법으로 사용하면 된다.










 


반응형