kleiner TCP-Server mit SocketServer?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Sonntag 24. August 2008, 09:53

guten Morgen,
ich vermute ich bekomme meinen Server nie ganz so hin, wie ichs gerne hätte. Ich poste einfach mal weiter hier in diesen Thread, da mein nächstes Problem sich auch immer noch irgendwie mit auf meinen Eingangspost bezieht.

Also ich habe folgendes Problem: Bei bestehender Netzwerkverbindung Funktioniert alles wie vorgesehen. Aufgund meiner - zugegeben etwas speziellen LAN- Umgebung (die genauen Angaben sind eigentlich nicht so wichtig)- kommt es manchmal unvorhergesehen zu Verbindungsabbrüchen zwischen Server und Client. Weder Server noch Client stört das wirklich, so macht es den Eindruck. Allerdings bekomme ich keine Saubere Verbindung nach so einem Abbruch mehr hin. Der Client versucht sich auf dem Port auf dem der Server lauscht zu verbinden - der Server sendet daraufhin auch seine Antwort - aber dannn verläuft die Nachricht im Sande... Bei Server und Client tritt nach einer gewissen Zeit ein Timeout auf.

Das Problem das TCP-Nachrichten vom Server nicht ankommen tritt nur auf, wenn vorher die Netzwerkverbindung unterbrochen wurde. Momentan ist die einzige Möglichkeit wieder eine Funktionierende Vebindung zu bekommen ein Neustart des Servers.

Lange Rede - kurzer Sinn: Gibt es eine Möglichkeit für mich zur Laufzeit des Servers den Server neu zu starten? Mein Server ist ja instanziiert mit

self.dispatcher = SocketServer.TCPServer(('', PORT), self.HTTPService)
self.dispatcher.serve_forever()

In der Doku zu Python 2.6b3 habe ich gesehen das es dort ein gegenstück zu 'serve_forever' gibt - 'shutdown()'. Wenn ich das richtig verstehe, wäre das glaube ich genau das was ich suche. Gibt es sowas auch selber gebaut für python 2.5?

Ich habe schon versucht die Methode 'server_vorever' des streamrequeshanderl nachzubauen. Dort habe ich einfach eine Möglichkeit eingebaut die Endlosschleife zu unterbrechen. Aber scheinbar muss ich noch mehr machen um den Server sauber zu stoppen und anschliessend wieder ordnungsgemäß ans laufen zu bekommen.
Vielleicht gibt es ja noch andere Möglichkeiten den Server neu zu starten?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 24. August 2008, 13:42

Hint: du kannst dir einen eigenen SocketServer schreiben, der shutdown() besitzt, indem du einfach eine neue Klasse ableitest und dann die Methoden erweiterst. Oder einfach den SocketServer aus 2.6 nutzen. Schau dir doch einfach jeweils den Quellcode an.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Lonestar
User
Beiträge: 147
Registriert: Samstag 9. August 2008, 08:31

Sonntag 24. August 2008, 17:33

Hi, auf die Idee meine eigene Methode zu erstellen die wie der shutdown funktioniert war ich auch schon gekommen. Da bei der Methode serve_forever() einfach nur eine Endlosscheife lief die einen request angenommen hatte. Allerdings kam ich dann auf dauer nicht weiter, da ich von dem Socketserver und den zugehörigen Modulen einfach viel zu wenig verstehe. Aber auf die Idee zu kommen einfach das SocketServer Modul aus Python 2.6 zu nehmen - darauf bin ich nicht gekommen.

Ich hab einfach mal Testweise das Modul direkt in den Ordner für meinen TCP-Server kopiert - lief anstandlos. Zwar reagiert der Server mit dem Aufruf von shutdown nicht so wie ich das dachte, dafür scheint mein Kommunikationsproblem nach Verbindunsabbruch aber auch nicht mehr zu existieren. Ich werde das wohl ein paar Tage beobachten...
Antworten