Ihr kennt sicher die Codeschnipsel Einfacher XML-RPC Server und Client und Einfacher Threading XML-RPC Server und Client.
Testumgebung: Python 2.4.4; Windows XP Professional;
Neulich wollte ich testen, wie lange es dauert, mit dem einfachen "Threading XMLRPC-Server", einen kleinen (500kb) Datenbankdump von Tirol nach Wien zu übertragen. Wenn die Skripte lokal ausgeführt werden, dann funktioniert alles wie gewünscht.
Zuerst wollte ich einfach nur die oben genannten Skripte ausprobieren, um die Verbindung zu testen. Dafür habe ich mich mit meinem Technischen Leiter in Verbindung gesetzt und ihn gebeten, auf seinem Computer das Serverskript auszuführen.
Noch schnell ein Ping (um sicher zu gehen) an den Computer geschickt. --> 30ms damit kann ich gut leben.
Das Serverskript wurde in Wien gestartet und ich startete das Clientskript von Tirol aus. Und jetzt kommt's: Es dauerte bei jedem Test um die fünf bis sechs Sekunden, bis ich eine Antwort vom Serverskript sah.
Auch in Wien sah man erst nach fünf oder sechs Sekunden eine Reaktion auf dem Computer. Dann dachte ich mir. Vielleicht liegt es an dem Skript selber, also habe ich veranlasst, dass zum Testen folgender, einfacher CGI-Server gestartet wird.
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
server = HTTPServer(("", 8888), CGIHTTPRequestHandler)
print "Der Server horcht auf Port 8888"
server.serve_forever()
Dann ließ ich in Wien auf dem gleichen Computer den Apachen installieren. Dieser horchte auf Port 8080. Und siehe da. Es gab keine Verzögerung, bis ich etwas vom Apachen zu sehen bekahm.
Was ist da los? Warum gibt es diese Verzögerung, bei der Verwendung des eingebauten HTTP-Servers???
Bei Karrigell-Websites habe ich von diesem Verhalten auch schon gehört -- aber nur selten.
Kann es sein, dass der eingebaute HTTP-Server Probleme mit Windows hat?
Ich machte noch einen Versuch. Ich schrieb ein kleines CherryPy-Skript. Eines, das aus dem CherryPy-Server einen XMLRPC-Server macht.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import cherrypy
from cherrypy._cptools import XMLRPCController
class Root(XMLRPCController):
def xmlrpctest(self, text):
return {"text": text}
xmlrpctest.exposed = True
def main():
cherrypy.quickstart(Root())
if __name__ == "__main__":
main()
Weiß jemand, warum und weshalb und überhaupt? Weiß jemand einen Workarround, um den eingebauten HTTP-Server doch nutzbar zu machen?
lg
Gerold