2012-12-17 2 views
4

Socket.io가 Java Netty 서버에 연결됩니다. socket.io가 다운 된 동안 서버를 연결하려고하면 404가 발생합니다. 따라서 자바 스크립트 콘솔은 다음과 같이 말합니다 :Socket.io 클라이언트가 첫 번째 시도 후에 연결할 수 없습니다.

http://mylocalhost.com/socket.io/1/?t=1354790544338 - Failed to load resource 

이 후 socket.io 연결이 완전히 종료됩니다. 그 404 때문에 다시 연결하려고하지 않습니다 ...

어떻게 처리해야합니까? 5 초마다 연결을 시도하고 서버를 온라인 상태로 설정하려고 시도했지만 그 오류로 인해 연결을 시도하지 않습니다.

페이지를 새로 고침하면 정상적으로 작동합니다. socket.io에 서버가 다시 온라인 상태 일 때이를 관찰하고 연결하는 방법이 있습니까? 적절한 해결책이 무엇일까요?

나는 socket.io.js 클라이언트에 javscript를 제대로 넣었는지, 그리고 무슨 일이 일어나고 있는지에 대한 이해이 있는지 확인했습니다 :

  1. socket.io가 악수를 시작하고, socket.socket.connecting입니다 서버가이 오류가 아래로
  2. 때문에 사실
  3. 요청 http://mylocalhost.com/socket.io/1/?t=1354790544338로 설정 (404)가 발생하지만, socket.socket.connecting은 다시 연결을 시도하지 않기 때문에 다음, 실패 할 시도를 다시 일으키는, 참으로 남아있다 이미 다시 연결하려고한다고 생각하는 경우

다시 연결하기 전에 disconnect()을 호출 해 보았습니다. 재 연결을 false로 설정했지만 연결 소켓이없고 으로 전화하면 "Cannot call method 'close' of undefined"이됩니다.

다시 연결을 false로 설정하려면 적절한 해결책이 될 수 있습니다. 다음 연결 시도가 준비되도록 socket.io를 재설정하십시오.

답변

-1

요청하려고하는 socket.io 파일에는 JS에서 사용할 실제 스크립트가 들어 있습니다. 이 파일은 Java 서버에서 제공합니다. 따라서이 파일을 요청하면로드가되지 않아 404 오류가 표시됩니다.

파일이로드되지 않으므로 해당 파일에서 가져온 소켓과 관련된 모든 것이 사용 가능하지 않습니다. 그래서 스크립트 파일이로드되지 않을 때 시나리오를 잡으려고합니다. 확인 : load scripts asynchronously

이 스크립트를 비동기 적으로로드하고로드 후 상태를 확인해야합니다. 실패하거나 응답하지 않은 경우 - 요청 핸들을 비우고 약간의 지연 후에 다시 요청하십시오.

일단 파일이 성공적으로로드되면 JS 함수를 사용하여 connect 등을 호출 할 수 있습니다.

+1

파일이로드되지 않았습니다. 다시 연결하려고하기 때문에 올바른 파일입니다. –

1

가능한 모든 socket.io 클라이언트 오류에 대한 처리기 설정 은 나를 위해이 문제를 해결하기 위해으로 보입니다. 즉, 포함

'connect_error' 
'connect_timeout' 
'reconnect_error' 
'reconnect_failed' 
'error' 

을 실험 조금 후, '오류'핸들러는 다른 모든 정지에서 404를 방지하기위한 중요한 것 같다.

*는 로컬 테스트 설정에서 안정적으로 재현 할 수 없기 때문에 수정 된 것으로 보입니다. 이 핸들러를 추가하면 다른 사람에게 문제가 해결되는지 알 수 있습니다.

+1

심지어 나를 위해 그것은 던져지는 오류 이벤트입니다. 단지 듣기 만하면 해결되지 않습니다. 그래서 핸들러 내부에서 재 연결을 시도했다. 작동하지 않는다 (나는 firebug에서 http 호출을 보지 못했다). 흥미로운 것은 내가 다시 연결하는 코드에서 포트를 변경하면 그렇게하려고한다는 것입니다. – reallynice

관련 문제