[mod_python] Client noch online?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
IoI
User
Beiträge: 68
Registriert: Dienstag 1. Dezember 2009, 11:39

Hallo zusammen,

ich baue gerade einen Web-Service mit Hilfe des Apache-Mods mod_python auf. Aus Sicherheitsgründen werden immer nur eine gewisse Anzahl von Anfragen gleichzeitig bearbeitet werden. Sollten mehr Anfragen gestellt werden, müssen diese warten.

Nachdem wieder ein Worker-Thread frei geworden ist rückt die nächste Anfrage nach. Nun kann es aber sein, dass der Client bereits gar nicht mehr online ist. Um das heraus zu finde hatte ich bis jetzt immer folgende Funktion aufgerufen.

Code: Alles auswählen

def connectionTest(req):
  try:
    req.write(" ")
  except IOError, e:
      #Schreinen ist fehlgeschlagen --> Verbindung getrennt
      return False
  #Schreiben war erfolgreich --> Verbindung OK
  return True
Beim debuggen ist mir allerdings aufgefallen, dass das Schreiben (also Daten senden an den Client) scheinbar erfolgreich ist, obwohl die Verbindung schon lange (>1min) nicht mehr besteht. Weiter habe ich fest gestellt, dass ich einen IOError erst bekommen wenn der Apache Timeout überschritten wurde (und zwar gezählt vom ersten Schreiben an).

Jetzt könne ich zwischen zwei Schreibversuchen die Timeout-Zeit warten, allerdings würde das im "normalen" Betrieb zu unnötigen Wartezeiten führen.

Also benötige ich eine andere Methode, um den Online Status des Clients zu prüfen. Überlegt hatte ich mir schon , dass ich auf das HTTP ACK des Clients auf die aktuelle Sequenz abwarte bzw. die Acknoledgement Number polle. Allerdings hab ich hierzu noch nicht herausgefunden, ob und wenn wie ich an diese Daten komme.

Hat da jemand eine Idee oder alternative Vorschläge die Verbindung zu testen?
Antworten