2010-10-17 10 views
12

Ich verwende node.js für lange gehaltene Verbindungen. Ich möchte wissen, wie ich erkennen kann, wenn die Client-Verbindung geschlossen wird (möglicherweise, wenn der Benutzer die Registerkarte schließt). Wie gebe ich einen Rückruf dafür an?Detecting Schließen der Clientverbindung in node.js

Antwort

9

meine eigene Frage zu beantworten - Sie können in der Nähe von Client-Verbindung erkennen, indem Sie:

http.createServer(function(request, response) {  
    request.connection.addListener('close', function() { 
     // callback is fired when connection closed (e.g. closing the browser) 
    }); 
} 
+0

Dies löst aus, nachdem Sie eine Antwort senden, nicht vorher. – JasonS

+1

@JasonS Das ist der Verbindungsabruf ... Das Ereignis wird hinzugefügt, wenn der Benutzer sich mit dem Server verbindet - nichts, was mit dem Senden einer Anfrage zu tun hat. –

0

einen Blick auf Socket.io nehmen. Es unterstützt die folgenden Transporte mit Fallbacks in dieser Reihenfolge:

  1. WebSocket
  2. Adobe Flash Sockel
  3. AJAX lange Polling
  4. AJAX mehrteiliger Streaming
  5. immer Iframe
  6. JSONP Polling

Der Vorteil ist, dass Sie viel mehr handhaben können c oncurrent Verbindungen als lange Polling allein. Zusätzlich erhalten Sie eine Vielzahl von Funktionen wie Heartbeats und Disconnects.

io.sockets.on('connection', function (socket) { 

    // ... other socket handlers here ... 

    socket.on('disconnect', function() { 
    // do something to handle the disconnect 
    }); 
}); 
+0

downvoted für: ein Problem mit einem anderen Problem zu lösen – colthreepv