Ankündigung

Einklappen
Keine Ankündigung bisher.

jsftp, timeout -> reconnect

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • jsftp, timeout -> reconnect

    Hallo,

    zu meinem Websocketserver habe ich das Modul jsftp installiert, soweit klappt alles wunderbar.
    Da mehrere Verbindungen zu Händeln sind speichere ich die Verbindungen in ein Object ab.
    Leider scheint das Modul Verbindungen irgendwann zu unterbrechen/einzuschlafen und aktuell versuche ich solche Verbindungen zu reaktivieren.

    Zu einem habe ich vor jedem call eine Abfrage erstellt welch den Status abfragen soll - findet sich unten auch wieder (ausgeklammert):
    Code:
    ftp.raw("stat", function(err, data) {
        if( err ){
            console.log('error on get stat: ');
            console.log( err );
        }else{
            if( data.code !== 211 ){
                console.log('reconnect needed:');
                ftp.raw("rein", function(err, data) { if( err ){ console.log('REIN error: '); console.log( err ); }else{ console.log('re connected:'); } });
            }else{
                console.log('connection is active');
            }
        }
    });
    Nun wenn die Verbindung nicht mehr aktive ist, wird ein error ausgerufen das man sich mit Username und pw anmelden mögen.
    Komischerweise nur einmal dann beim erneuten öffnen eines Ordners erfolgt wieder die Ausgabe "Connection is active", welches in der else von der stat abfrage ausgegeben werden soll.
    "reconnect needed" erscheint allerdings kein einziges mal in der console und trotzdem heißt es die Verbindung sei active.
    Oben drein funktioniert kein einziger Befehl da weder Dateien noch Ordner gefunden werden.


    So stellen sich mir erstmal 2 Fragen:

    1) welches ist die optimale Weise um die Verbindung zu überprüfen, gibt es da evtl. eine Modulspezifische-Möglichkeit?

    2) reicht ein ftp.raw("rein", function()) aus oder muss man tatsächlich komplett neu authentifizieren?
    Ich mein ein richtiger FTP-Client hält seine Verbindung auch ewig offen, zu mindestens mein FileZilla.

    app.js hier
    Hier noch paar infos zum zurechtfinden.
    Im großen und ganzen geht es um #243 wpHandler(uid, data);, diese Funktion wird bei jedem call aufgerufen.
    Die enthalten switch-Anweisung steuert dabei auch wenn die Seite zum ersten mal geladen wird und wenn die Webseite eine neue Verbindung zu einem anderen Server anfordert.

    In der default-Anweisung werden folglich alle anderen Anfragen abgearbeitet, somit auch wenn das FTP-Modul beansprucht wird, wie man sieht habe ich dort schon eine Schleife eingebaut die sicherstellt das auch eine FTP-Verbindung vorliegt. Nun kommt eben das Problem von oben zum Einsatz das auch wenn eine FTP-Verbindung hergestellt ist das Modul diese iwann einschlafen lässt und ich bekomme es nicht hin diese zu reaktivieren oder durch eine neue aktive Verbindung zu ersetzen


    MfG: Paykoman

  • #2
    Ich mein ein richtiger FTP-Client hält seine Verbindung auch ewig offen, zu mindestens mein FileZilla.
    https://github.com/sergi/jsftp#ftpkeepalivewait

    Kommentar


    • #3
      Ahh ok, die hatte ich sogar schon mal gesehen, wenn ich es richtig verstanden habe kann dort halt optional ne Wartezeit angegeben werden aber dann wird die Verbindung wieder aktiv...

      Gut dann fehlt ja nur noch eine anständige Abfrage um zu ermitteln wann die Verbindung eingeschlafen ist, denn ftp.rw('stat') liefert immer eine aktive Verbindung.

      Aktuell habe ich es so gelöst das mein ftp-Client beim verbinden einen Ordner erstellt (wenn nicht vorhanden) und diesen versuche ich auszulesen wenn es fehlschlägt weiß ich die Verbindung ist inaktiv und ich generiere eine neue...

      Bin mir aber sicher das es da ne einfachere Lösung gibt

      Kommentar


      • #4
        Bin mir aber sicher das es da ne einfachere Lösung gibt

        Jo, viel Spaß beim Suchen, Docu vorlesen ist auf Dauer langweilig.

        Kommentar


        • #5
          Nun ja, finde die Antwort etwas übertrieben, denn man sieht an Hand meinen Posts ja deutlich das ich mich selber auch mit der Doku beschäftige.

          Am Sonntag habe ich bereits die ftp.rawr('stat') Funktion getestet die aber immer ein Positives Ergebnis zurück liefert, eben habe ich dann auch mal ftp.raw('noop') getestet mit selben Ergebnis.

          Es ist mir also nach wie vor völlig unklar, wie man die Prüfung gestallten soll, denn es muss ja einen Auslöser geben bevor ich keepAlive() ausführe....


          ::EDIT::
          Die einzige Alternative die mir eingefallen war, da ich eh jeden call abfange, verlängere ich die Lebenszeit einfach um 5 weitere Minuten bei jedem call.
          Auch wenn die Verbindung eingeschlafen war ist sie dann automatisch aktiv, da kann man sich dann eigentlich auch das Ereignis zum Auslösen sparen.

          Kommentar

          Lädt...
          X