2012-07-26 2 views
7

랩톱이 일반적으로 잠자기 상태가되는 경우가 많습니다. 이렇게하면 socket.io 클라이언트의 연결이 끊어집니다. 사용자가 웹 응용 프로그램으로 돌아 오면 socket.io 클라이언트는 다시 연결을 시도하지 않습니다 (아마도 재 연결 제한에 도달 했습니까?). 사용자가 몇 가지 작업을 수행하면 소켓에 다시 연결하도록 지시하는 방법은 무엇입니까?자동 재 연결 시간 초과 후 activity에 socket.io 클라이언트를 다시 연결하는 방법은 무엇입니까?

예를 들어, emit 함수를 사용하여 연결이 활성화되어 있는지 확인한 다음 다시 연결하려고 시도하고 싶습니다.

참고 : 클라이언트 측 JS 코드 만 필요하며 node.js.를 사용하지 않습니다.

답변

2

당신은 connect.failed 이벤트를 사용을 시도 할 수 있습니다 :

socket.on('connect_failed', function() { 
    /* Insert code to reestablish connection. */ 
}); 
+0

등의 연결 상태를 확인하는 setInterval을 실행 할 수 참조하십시오. 문제는 랩탑이 깨어 난 후에 또는 잃어버린 무선이 다시 연결 된 후에 connect_failed가 실행되지 않는다는 것입니다. 그래서 사용자 활동에 다시 연결하려고 생각하고 있지만 어떻게해야할지 모르겠다. –

+0

+1이 방법은 노트북이 깨어날 때 호출되기 때문입니다. 하지만 자동 재 연결 시간이 초과 된 후 다시 연결을 시도하고 네트워크 연결이없는 경우와 같이 socket.io가 포기하는 방식이 필요합니다. –

4

소켓 인스턴스가 차례로 호출 할 수() 메소드를 연결할 수있는 내부 '소켓'속성을 가지고있다. 일반적으로 객체를 인스턴스화 할 때 자동으로 호출됩니다 ('자동 연결'옵션에 의해 제어 됨). 내부 소켓에는 또한 상태가 무엇인지 확실하지 않은지 확인할 수있는 부울 값 "connected"가 있습니다. 그래서 같이 :

sio = io.connect(); 
//... time passes ... 
if (! sio.socket.connected) { 
    sio.connect(); 
} 

는 Connect() 메소드 검사 소켓이 어떤 이유로이 이미 연결되어 있는지 확인하지 않습니다하지만, 연결을 시도 중간에 있지 않은지 확인합니다. 이미 연결된 소켓()을 연결하면 어떻게되는지 확신 할 수 없습니다.

클라이언트 라이브러리의 소스 코드는 상당히 명확하고 잘 설명되어 있습니다. the README on github은 많은 도움을주지 못하기 때문에 좋습니다. 소스 코드를 파헤칠 수 있도록 개발 중에 라이브러리의 축소되지 않은 버전을 사용하는 것이 편리합니다. 버전 당신이 연결 옵션을 설정을 시도 할 수 있습니다 0.9에서

+0

감사합니다. Dirk. 클라이언트가 서버에 무언가를 보내려고 할 때마다 연결되지 않은 경우 socket.io에 다시 연결하도록 지시하려면 어떻게해야합니까? –

+0

코드가 어떻게 구성되어 있는지에 따라 다릅니다. 연결 상태를 검사하는 emit() 주위에 래퍼를 넣을 수 있습니다. 사용자가 다시 연결하려고하는지 묻는 대화 상자를 팝업하는 on ("disconnect") 기능을 가질 수 있습니다. 랩톱에서 뚜껑을 닫을 때 실제로 어떤 일이 일어나는지 보려면 실험을해야합니다. socket.io 코드가 어떻게 인식하는지 확실하지 않습니다. –

7

는 일부 공격적인 설정에 반대 :

var main = io.connect('/', { 
    'reconnection delay': 100, // defaults to 500 
    'reconnection limit': 100, // defaults to Infinity 
    'max reconnection attempts': Infinity // defaults to 10 
    }); 

max reconnection attemps 것을 10 회 실패시 입출력 클라이언트가 서버에 다시 연결 중단되는 것은 아닙니다. 서버에 10 번 다시 연결할 수 있고 11 번째 연결이 끊어지면 다시 연결을 중지합니다.

Socket.IO Configuration

-1

당신은 내가 이미 시도

s.connect() 

if (! s.socket.connected) { 
    s.connect();