반응형
말 그대로다.
여러가지 이유로 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 와 동일한 방법으로 사용하면 된다.
반응형
'프로그램' 카테고리의 다른 글
C#에서 thread 실행할 때 , 인자값 넘기는 법 + 람다식 사용. (0) | 2015.05.05 |
---|---|
javascript - 한글 입력 후 엔터키로 이벤트 처리할 때 , 이벤트가 두 번 발생하는 경우. (6) | 2015.04.10 |
protocol vs host vs hostname vs href (0) | 2015.03.13 |
nodejs 에서 mysql connection 이 안 될 때( connect ECONNREFUSSED 에러 ). (2) | 2015.03.11 |
centos 에서 node.js 설치 (0) | 2015.03.10 |