Socket.io
이 문제가 또 저를 붙잡았습니다.
예전에 자바스크립트로 코딩할 때, 알 수 없는 이유로 클라이언트 측에서
엄청나게 많은 reconnect를 요구하는 바람에 노드 서버가 아무것도 못하고
뻗어버리는 현상이 있었는데요
그때는 자바스크립트 측에 강제로 횟수 제한을 두어서 계속 연결 시도를 못하게 했었습니다.
이번에는 클라이언트가 자바인 경우인데요.
많은 Reconnect를 요구하는 것이 아니라 제대로 연결이 안됩니다.
게다가 될때도 있고 안될때도 있어서 매우 혼란스러운 상황이었습니다.
일단 로그는 다음과 같습니다.
서버측 : client not handshaken client should reconnect
클라이언트측 : IOCallback() 의 onError 작동
해결은 다음과 같이 했습니다.
// 사용 : https://github.com/Gottox/socket.io-java-client static public int socketCnt=0; // 사용될 전역변수입니다. static Thread tRecv; public static void initialize(){ tRecv = new Thread() { public void run() { try { socket = new SocketIO("http://***:***/"); IOCallback IOC=new IOCallback() { @Override ... @Override public void onError(SocketIOException socketIOException) { System.out.println("an Error occured"); //그러니까 요지는, 에러가 나면 다시 연결을 시도 한다는 겁니다. //횟수 제한을 두도록 했습니다. try { if(socketCnt<10){ socket = new SocketIO("http://***:***/"); socket.connect(this); socketCnt++; } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } socketIOException.printStackTrace(); } @Override ... socket.connect(IOC); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }; tRecv.start(); try { tRecv.join(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } 일단은 해결 된 듯 보이지만 시간이 지나봐야 알 것 같네요ㅋㅋ
좋은 정보네요. 구글에서 해답을 못 찾고 있는데 저는 socket 옵션을 "force new connection": true, "reconnect":true, 으로 설정했는데 위와 같은 에러가 발생하고 있네요. 저도 에러가 발생할 때 new socket.io으로 처리해 봐야 겠습니다.
답글삭제네~감사해요. 또 들러주세요 ^^
삭제안녕하세요 전 학부생 초보 프로그래머 입니다.
답글삭제저도 똑같은 gottox 분의 라이브러리로 웹소켓을 연결하고 싶은데 혹시 실례가 안된다면 안드로이드 클라이언트 부분
공유해주실수 있으신가요? 몇일동안 계속하고있는데 남들은 handshaking 부분에서 오류가 난다는데 너무 초보라 거기까지도 못가고 어떻게 하는지도 찾아봐도 잘 안나오네요 죽고싶네요 도와주세요...
안녕하세요 전 학부생 초보 프로그래머 입니다.
답글삭제저도 똑같은 gottox 분의 라이브러리로 웹소켓을 연결하고 싶은데 혹시 실례가 안된다면 안드로이드 클라이언트 부분
공유해주실수 있으신가요? 몇일동안 계속하고있는데 남들은 handshaking 부분에서 오류가 난다는데 너무 초보라 거기까지도 못가고 어떻게 하는지도 찾아봐도 잘 안나오네요 죽고싶네요 도와주세요...
제가 너무 늦진 않았나요?ㅜㅠ 저는 안드로이드 클라이언트 부분을 gottox라이브러리를 쓰지 않고 다른 라이브러리를 사용했는데요, 요청시 보내드리겠습니다. 그리고 혹시 여기까지 해결하셨다면 handshaking 오류는 Node.js Socket.io 라이브러리의 버젼이 바뀌어서 그런것이므로 낮은 버젼의 socket.io 라이브러리를 사용하시면 됩니다.
삭제