2009-07-11 8 views
3
  • App Engine ermöglicht Ihnen 30 Sekunden zum Laden Ihrer Anwendung
  • Meine Anwendung dauert etwa 30 Sekunden - manchmal mehr, manchmal weniger. Ich weiß nicht, wie ich das beheben soll.
  • Wenn die App im Leerlauf ist (eine Anfrage wird für eine Weile nicht empfangen), muss sie erneut geladen werden.
  • Um zu vermeiden, dass die App neu geladen werden muss, möchte ich die Benutzeraktivität simulieren, indem ich die App regelmäßig anpinge.Wie man eine App Engine/Java App mit tauben Anfragen von einem Java/Python-Webcron laufen lässt?

    Aber es gibt einen Haken. . .

    Wenn ich die App anpinge und sie bereits von App Engine entladen wurde, wird meine Webanfrage die erste Anfrage an die App und die App wird versuchen, sie erneut zu laden. Dies könnte länger als 30 Sekunden dauern und das Ladezeitlimit überschreiten.

    Also meine Idee ist es, die App zu pingen, aber nicht auf die Antwort warten. Ich habe das manuell simuliert, indem ich von einem Browser zur Website gegangen bin, die Anfrage gestellt und sofort den Browser geschlossen habe - es scheint die App am Leben zu erhalten.

    Alle Vorschläge für eine gute Möglichkeit, dies in einem Python oder Java Web Cron zu tun (ich nehme an, eine Python-Lösung wird einfacher sein)?

    +0

    warum Ihre Anwendung 30 Sekunden bekommt zu laden? was benutzt du? log4j? – dfa

    +0

    Ich denke, dfa hat die richtige Idee - es ist wahrscheinlich eine bessere Nutzung Ihrer Zeit, um herauszufinden, warum es 30 Sekunden dauert, bis Ihre App geladen wird. Wie lange dauert eine typische Anfrage, nachdem sie geladen wurde? Wird das Starten in der Entwicklungsumgebung oder nur bei der Bereitstellung 30 Sekunden dauern? Rechnen Sie große Zahlen in einem statischen Initialisierer irgendwo ein? :) –

    +0

    Definitiv besser herauszufinden, warum Ihre App 30 Sekunden zum Starten benötigt. Das ist eine extrem lange Zeit für eine Webanwendung. –

    Antwort

    1

    Ich denke, was Sie wollen, ist einfach:

    import httplib 
    hcon = httplib.HTTPConnection("foo.appspot.com") 
    hcon.request("GET", "/someURL") 
    hcon.close() 
    
    +0

    httplib auf App Engine ist in Bezug auf die Urlfetch-API implementiert - dieses Snippet wird nicht tun, was Sie erwarten. –

    +0

    Nick, es war mein Verständnis, dass er diesen Ping-Code auf einem Computer/außerhalb/App Engine ausführen wollte. –

    1

    die einfachste Java http Pinger:

    URLConnection hcon = new URL("http://www.google.com").openConnection(); 
    hcon.connect(); 
    hcon.getInputStream().read(); 
    
    1

    App-Engine hat auch eine neue PAY-Funktion, wo Sie es immer "an" haben können. Kostet ca. 0,30 USD pro Tag. Gehen Sie einfach in Ihre Abrechnungseinstellungen und aktivieren Sie sie, wenn es Ihnen nichts ausmacht, für diese Funktion zu bezahlen. Ich glaube, es garantiert Ihnen mindestens 3 Instanzen, die immer laufen.

    (Ich wusste nicht, ein/ping url schlagen, die eine Instanz verursacht spinnen würde es bewirken, dass die 30 Sekunden Grenze überschreiten!)