2014-10-08 3 views
0

첫 번째 서버가 중단되어 reconnect_failed에서 시도 할 때 새 서버에 연결하려고합니다. 이제는 잘 작동하고 있으며, 첫 번째 서버 연결이 끊어지고, 두 번째 서버가 연결되어 있고 메시지를 듣고 있습니다.연결 해제시 소켓 서버 전환

socket.on('reconnect_failed', function() { 
    console.log("reconnect_failed"); 
    socket = io.connect('http://localhost:4000',{ 
      'reconnectionDelay': 100, 
      'reconnect':false, 
      'reconnectionAttempts': max_reconnects}); 
    console.log(socket); 
}); 

socket.on('new message', function(msg){ 
    console.log(msg); 
    document.getElementById("chat").innerHTML = msg; 
}); 

그러나 클라이언트 측에서 "새 메시지"이벤트는 두 번째 서버에서 수신하지 않습니다. 해당 소켓이 다시 시작되지 못하여 내부에서 시작 되었기 때문에 실패했습니다. 더 적은 코드로 처리 할 수있는 다른 방법이 있습니까?

+1

@xShirase,이 질문을보십시오. 너는 이것에 도울 수있을 것으로 예상했다. 미리 감사드립니다. 웹 사이트의 사용법을 배우려고합니다. –

+0

아무런 문제가 없으므로이 사이트는 훌륭합니다. 그래서 우리 모두는 그렇게하기 위해 최선을 다해야합니다. 내가 지금 당신의 문제에 대해 옳은 곳에서 할 수있는 것을 보도록하자. – xShirase

답변

1

연결 해제시 서버를 전환하는 기능이 있습니다. 같은 뭔가 :

function initSocket(i){ 
    sockets = io.connect(servers[i], { 
      'reconnectionDelay': 100, 
      'reconnect':false, 
      'reconnectionAttempts': max_reconnects}); 
    sockets.on("connection", function(socket){ 
     socket.on('connect',function(data){}); 

     socket.on('new message', function(msg){ 
      console.log(msg); 
      document.getElementById("chat").innerHTML = msg; 
     }); 

     socket.on('reconnect_failed', function() { 
      console.log("reconnect_failed"); 
      i==0 ? 1 : 0; //switch the value of i 
      initSocket(i) //init a socket on the other server 
     }); 
    }); 
} 

var servers = ["http://localhost:3000","http://localhost:4000"]; 

initSocket(0); //start with server 0 (http://localhost:3000) 

이것은 동일한 속성과 이벤트 리스너와 연결을 해제에 두 서버간에 당신에게 스위치를 제공해야합니다. 하나가 충돌하면 다른 하나가 작동합니다.

+0

나는 그것을 테스트하지 않았고, 나는 내 PC에 없다. 오자가 있다면 알려주세요.하지만 스위치 기능의 요점을 알 것 같습니다. – xShirase

+0

이것은 굉장합니다, 당신은 논리적 인 마음이 좋습니다. 당신의 아이디어에 감사드립니다. 그것의 작동 ... @xshirase –