2014-10-08 4 views
0

Я пытаюсь подключить новый сервер, когда первый сервер отключен и попытался выполнить команду reconnect_failed. Upto теперь работает нормально, первый сервер отключается, второй сервер подключен и прослушивает сообщение.Переключить сервер сокета на разъединение

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) 

Это должно дать вам переключаться между 2 серверов на разъединение, с точно такими же свойствами и слушателей событий. Когда один падает, другой берет верх.

+0

Я не тестировал это, я не на своем компьютере. если есть опечатка, дайте мне знать, но я думаю, вы видите точку функции переключателя – xShirase

+0

Это потрясающе, у вас есть хороший логический ум. Спасибо за вашу идею. Он работает ... @xshirase –

Смежные вопросы