2012-10-23 16 views
16

Używam node.js i socket.io do tworzenia aplikacji internetowej w czasie rzeczywistym. Daję użytkownikom pełną kontrolę nad połączeniem z gniazdem, np. Ręczne rozłączenie i (ponowne) nawiązanie połączenia.Socket.io - Ręczne ponowne połączenie po rozłączeniu po stronie klienta

function socket_connect() 
{ 
    console.log('func socket_connect'); 
    socket = io.connect('http://url/to/the/app'); 
} 

function socket_reconnect() 
{ 
    console.log('func socket_reconnect'); 
    socket_connect(); 
} 

function socket_disconnect() 
{ 
    console.log('func socket_disconnect'); 
    if (socket) socket.disconnect(); 
} 

Na kliencie uruchomić funkcję socket_connect() działa dobrze, ale po użyciu socket.disconnect(), nie uruchamia nowe połączenie.

+1

Co masz na myśli, gdy "nie rozpoczyna się nowe połączenie"? To nie powoduje automatycznego ponownego połączenia lub gdy użytkownik wybierze socket_connect(), nowe połączenie nie działa. – Martin

+0

Automatyczne ponowne łączenie działa dobrze, to nie problem. Zobacz moją odpowiedź ... Problem rozwiązany. – acc

Odpowiedz

15

Działa teraz, z socket.socket.reconnect()

function socket_connect() 
{ 
    console.log('func socket_connect'); 
    socket = io.connect('http://url/to/the/app'); 
} 

function socket_reconnect() 
{ 
    console.log('func socket_reconnect'); 
    socket.socket.reconnect(); 
} 

function socket_disconnect() 
{ 
    console.log('func socket_disconnect'); 
    if (socket) socket.disconnect(); 
} 

pokrewne: https://github.com/LearnBoost/socket.io-client/issues/251

16

Jeśli używasz Socket.io 1.0, spróbuj użyć menedżera io na gnieździe, aby obsłużyć ręczne rozłączanie i ponowne podłączanie.

// Connect to socket.io 
var socket = io.connect('url'); 

function manual_disconnect() { 
    socket.io.disconnect(); 
} 

function manual_reconnect() { 
    socket.io.reconnect(); 
} 

reconnecting_attempt, podłączając, ponownie podłączone i połączone wydarzeniach gniazda powinny być emitowane później.

+2

irytująco, socket.disconnect() jest nadal dostępna w 1.x podczas gdy socket.reconnect() nie jest. W związku z tym wersja kmftzg jest prawdopodobnie najlepsza –

16

Możesz połączyć się ponownie, wykonując następujące konfiguracje po stronie klienta.

// for socket.io version 1.0 
io.connect(SERVER_IP,{'forceNew':true }); 
Powiązane problemy