332 Stimmen

Was ist eine schnellere Alternative zu Pythons http.server (oder SimpleHTTPServer)?

Pythons http.server (oder SimpleHTTPServer für Python 2) ist eine großartige Möglichkeit, den Inhalt des aktuellen Verzeichnisses von der Kommandozeile aus zu bedienen:

python -m http.server

Was jedoch Webserver betrifft, so ist er sehr langsam...

Es verhält sich so, als ob es single threaded ist, und verursacht gelegentlich Timeout-Fehler beim Laden von JavaScript AMD-Modulen mit RequireJS. Es kann fünf bis zehn Sekunden dauern, eine einfache Seite ohne Bilder zu laden.

Gibt es eine schnellere Alternative, die genauso bequem ist?

424voto

Drew Noakes Punkte 282438

http-server für node.js ist sehr praktisch und viel schneller als der SimpleHTTPServer von Python. Das liegt vor allem daran, dass er asynchrone IO für die gleichzeitige Bearbeitung von Anfragen verwendet, anstatt Anfragen zu serialisieren.

Einrichtung

Installieren Sie node.js, falls Sie das noch nicht getan haben. Verwenden Sie dann den Node-Paketmanager ( npm ), um das Paket zu installieren, wobei die -g für eine globale Installation wählen. Unter Windows benötigen Sie eine Eingabeaufforderung mit Administratorrechten, und unter Linux/OSX müssen Sie sudo den Befehl:

npm install http-server -g

Dadurch werden alle erforderlichen Abhängigkeiten heruntergeladen und installiert http-server .

Verwenden Sie

Jetzt können Sie von jedem beliebigen Verzeichnis aus eingeben:

http-server [path] [options]

Der Pfad ist optional und lautet standardmäßig ./public wenn sie existiert, ansonsten ./ .

Die Optionen sind [Standardwerte]:

  • -p Die Nummer des Ports, der überwacht werden soll [8080].
  • -a Die Host-Adresse, an die gebunden werden soll [localhost]
  • -i Verzeichnisindexseiten anzeigen [True]
  • -s ou --silent Der stille Modus protokolliert nicht auf der Konsole
  • -h ou --help Zeigt eine Hilfemeldung an und beendet sich

Um also das aktuelle Verzeichnis auf Port 8000 zu bedienen, geben Sie ein:

http-server -p 8000

117voto

Peter Gibson Punkte 17875

Ich empfehle: Verdreht ( http://twistedmatrix.com )

eine ereignisgesteuerte Netzwerk-Engine, die in Python geschrieben wurde und unter der Open-Source-MIT-Lizenz steht.

Es ist plattformübergreifend und wurde auf OS X 10.5 bis 10.12 vorinstalliert. Unter anderem können Sie damit einen einfachen Webserver im aktuellen Verzeichnis starten:

twistd -no web --path=.

Einzelheiten

Erläuterung der Optionen (siehe twistd --help für mehr):

-n, --nodaemon       don't daemonize, don't use default umask of 0077
-o, --no_save        do not save state on shutdown

"web" ist ein Befehl, der einen einfachen Webserver auf der Twisted async-Engine betreibt. Er akzeptiert auch Kommandozeilenoptionen (nach dem "web"-Befehl - siehe twistd web --help für mehr):

  --path=             <path> is either a specific file or a directory to be
                      set as the root of the web server. Use this if you
                      have a directory full of HTML, cgi, php3, epy, or rpy
                      files or any other files that you want to be served up
                      raw.

Außerdem gibt es eine Reihe weiterer Befehle wie z. B:

conch            A Conch SSH service.
dns              A domain name server.
ftp              An FTP server.
inetd            An inetd(8) replacement.
mail             An email service
... etc

Einrichtung

Ubuntu

sudo apt-get install python-twisted-web (or python-twisted for the full engine)

Mac OS-X (ist auf 10.5 - 10.12 vorinstalliert oder in MacPorts und über Pip erhältlich)

sudo port install py-twisted

Windows

installer available for download at http://twistedmatrix.com/

HTTPS

Twisted kann auch Sicherheitszertifikate verwenden, um die Verbindung zu verschlüsseln. Verwenden Sie dies mit Ihren bestehenden --path y --port (für einfaches HTTP) Optionen.

twistd -no web -c cert.pem -k privkey.pem --https=4433

35voto

pd40 Punkte 3177

gehen. 1.0 enthält eine http-Server & util für die Bereitstellung von Dateien mit ein paar Zeilen Code.

package main

import (
    "fmt"; "log"; "net/http"
)

func main() {
    fmt.Println("Serving files in the current directory on port 8080")
    http.Handle("/", http.FileServer(http.Dir(".")))
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Führen Sie diese Quelle mit go run myserver.go oder zum Erstellen einer ausführbaren Datei go build myserver.go

23voto

Hudon Punkte 1637

Versuchen Sie webfs Es ist winzig und hängt nicht davon ab, dass eine Plattform wie node.js oder python installiert ist.

16voto

Drew Noakes Punkte 282438

Wenn Sie Mercurial verwenden, können Sie den eingebauten HTTP-Server nutzen. In dem Ordner, den Sie ausliefern möchten:

hg serve

Von les docs :

export the repository via HTTP

    Start a local HTTP repository browser and pull server.

    By default, the server logs accesses to stdout and errors to
    stderr. Use the "-A" and "-E" options to log to files.

options:

 -A --accesslog       name of access log file to write to
 -d --daemon          run server in background
    --daemon-pipefds  used internally by daemon mode
 -E --errorlog        name of error log file to write to
 -p --port            port to listen on (default: 8000)
 -a --address         address to listen on (default: all interfaces)
    --prefix          prefix path to serve from (default: server root)
 -n --name            name to show in web pages (default: working dir)
    --webdir-conf     name of the webdir config file (serve more than one repo)
    --pid-file        name of file to write process ID to
    --stdio           for remote clients
 -t --templates       web templates to use
    --style           template style to use
 -6 --ipv6            use IPv6 in addition to IPv4
    --certificate     SSL certificate file

use "hg -v help serve" to show global options

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X