2016-07-18 10 views
2

Ich schreibe einen Datei-Cache-Server, um Kopien von statischen Dateien für einen Webserver zu halten. Wenn ein Thread im Webserver eine statische Datei benötigt, öffnet er eine Socket-Verbindung zum Cache-Server und sendet ihm das Ergebnis socket.share() + den Namen der gewünschten Datei. Der Cache-Server verwendet das Ergebnis socket.share, um über socket.fromshare Zugriff auf den HTTP-Client zu erhalten, und sendet den Inhalt einer statischen Datei. Dann schließt es seine Kopie des HTTP-Client-Sockets und die Verbindung des Threads mit ihm.Kann ich ein Socket-Datei-Handle mit socket.fromshare wiederverwenden?

Ich frage mich, ob die Verwendung von socket.detach anstelle von socket.close automatisch die Leistung verbessert? Die Dokumentation für socket.detach sagt das:

Setzen Sie das Socket-Objekt in geschlossenen Zustand, ohne den zugrunde liegenden Dateideskriptor tatsächlich zu schließen. Der Dateideskriptor wird zurückgegeben und kann für andere Zwecke wiederverwendet werden.

Muss ich ausdrücklich Deskriptoren die zurückgegebenen Datei irgendwie verwenden, wenn neue Buchsen durch den Cache-Server erstellt werden, oder hat das socket Modul wissen, über wiederverwendbare Filedeskriptoren vorhanden?

Antwort

0

socket.detach löscht nur das Dateideskriptorfeld auf der Struktur PySocketSockObject. Es speichert den Wert in keiner Weise, so dass der Rest des Moduls wissen könnte, dass der Dateideskriptor für die Wiederverwendung verfügbar ist.

0

Ich bin mir nicht sicher, warum:

  1. Sie verwenden socket.share und
  2. Sie denken, dass es die Leistung verbessern würde.

Sie sagen, dass Sie bereits Threading sind. Ein Webserver wird IO-gebunden sein. Die meiste Zeit wird ausgegeben: (?! Speicher Süße, schneller)

  • eine TCP/IP-Verbindung zwischen Client und Server
  • finden die Informationen auf der Festplatte
  • Lesen von der Festplatte zu verhandeln (Speicher?) und

an die Buchse Schreiben Sie sollten auch Code-Profil, bevor Sie über Verbesserungen gehen. Was ist der tatsächliche Überfall? Verbindung herstellen? Von der Festplatte lesen? Zurück zum Client senden?

Sofern Sie bereits einige enorme Verbesserungen vorgenommen haben, bin ich mir ziemlich sicher, dass die tatsächliche TCP/IP-Verhandlung ist ein paar Größenordnungen schneller als Ihre Informationen von der Festplatte.

Verwandte Themen