it-swarm.dev

Python'un http.server (veya SimpleHTTPServer) için daha hızlı bir alternatif nedir?

Python's http.server (veya Python 2 için SimpleHTTPServer), geçerli dizinin içeriğini komut satırından sunmanın harika bir yoludur:

python -m http.server

Ancak, web sunucuları giderken, çok slooooow ...

Tek iş parçacığı gibi davranır ve bazen RequireJS kullanarak JavaScript AMD modülleri yüklenirken zaman aşımı hatalarına neden olur. Resimsiz basit bir sayfa yüklemek beş ila on saniye sürebilir.

Bu kadar uygun olan daha hızlı bir alternatif nedir?

270
Drew Noakes

http-server for node.js çok kullanışlıdır ve Python'un SimpleHTTPServer'ından çok daha hızlıdır. Bunun nedeni, isteklerin seri hale getirilmesi yerine, eşzamanlı isteklerin yerine getirilmesi için zaman uyumsuz IO kullanmasıdır.

Installation

Henüz yapmadıysanız, node.js dosyasını kurun. Ardından paketi yüklemek için düğüm yöneticisi (npm) kullanın, genel olarak yüklemek için -g seçeneğini kullanın. Windows kullanıyorsanız, yönetici izinlerine sahip bir Komut İstemine ihtiyacınız olacak ve Linux/OSX'te bu komutu Sudo__ yapmak isteyeceksiniz:

npm install http-server -g

Bu gerekli tüm bağımlılıkları indirecek ve http-server dosyasını yükleyecektir.

Kullanım

Şimdi, herhangi bir dizinden şunu yazabilirsiniz:

http-server [path] [options]

Yol isteğe bağlıdır, varsa ./public 'a varsayılandır, aksi takdirde ./.

Seçenekler [varsayılanlar]:

  • -p Dinlenecek port numarası [8080]
  • -a [localhost] öğesine bağlanacak ana bilgisayar adresi
  • -i Dizin dizin sayfalarını görüntüle [Doğru]
  • -s veya --silent Sessiz mod konsola giriş yapmaz
  • -h veya --help Yardım mesajını görüntüler ve çıkar

Bu nedenle, geçerli dizini 8000 numaralı bağlantı noktasında sunmak için şunu yazın:

http-server -p 8000
370
Drew Noakes

Tavsiye ederim: Twisted ( http://twistedmatrix.com )

python'da yazılmış ve açık kaynak MIT lisansı altında lisanslanmış olaya dayalı bir ağ altyapısı.

Çapraz platformlu ve 10.5'ten beri OS X'e önceden yüklenmiş olarak geliyor. Diğer şeylerin yanı sıra, geçerli dizindeki basit bir web sunucusunu aşağıdaki yollarla başlatabilirsiniz:

twistd -no web --path=.

Ayrıntılar

Seçeneklerin Açıklaması (daha fazla bilgi için twistd --help'ye bakınız):

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

"web", Twisted async motorunun üstünde basit bir web sunucusu çalıştıran bir Komuttur. Ayrıca komut satırı seçeneklerini de kabul eder ("web" komutundan sonra - daha fazla bilgi için twistd web --help bakınız):

  --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.

Ayrıca aşağıdakiler gibi başka komutlar da vardır:

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

Installation

Ubuntu

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

Mac OS-X (10.5'ten beri önceden yüklenmiş olarak gelir veya MacPorts'ta bulunur)

Sudo port install py-twisted

, Windows

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

HTTPS

Twisted ayrıca bağlantıyı şifrelemek için güvenlik sertifikaları kullanabilir. Bunu mevcut --path ve --port (düz HTTP için) seçeneklerinizle kullanın.

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

 go 1.0 bir http sunucusu içerir & dosya sunarken birkaç kod satırıyla kullanır.

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)
    }
}

Bu kaynağı go run myserver.go kullanarak veya yürütülebilir bir go build myserver.go kullanarak çalıştırın.

25
pd40

Deneyin webfs , küçüktür ve node.js veya python kurulu bir platformun kurulmasına bağlı değildir.

19
Hudon

Mercurial kullanıyorsanız, yerleşik HTTP sunucusunu kullanabilirsiniz. Hizmet vermek istediğiniz klasörde:

hg serve

Dokümanlar :

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
14
Drew Noakes

İşte başka. Bu bir Chrome Uzantısı

Kurulduktan sonra Chrome'da yeni bir sekme oluşturarak ve sol üstteki apps düğmesine tıklayarak çalıştırabilirsiniz

Basit bir GUI var. Klasör seç öğesini tıklayın, ardından http://127.0.0.1:8887 bağlantısını tıklayın

 enter image description here

https://www.youtube.com/watch?v=AK6swHiPtew

9
gman

Ayrıca, devd 'yi yazarken küçük bir web sunucusu olarak düşünün. Birçok platform için ikili dosyalar mevcuttur burada

devd -ol path/to/files/to/serve

Küçük, hızlı ve dosyalarınız değiştiğinde canlı yeniden yükleme gibi bazı isteğe bağlı özellikler sunar.

6
gman

python -m http.server'yi güvenilmez buldum - bazı yanıtlar birkaç saniye alacaktır.

Şimdi Ran https://github.com/m3ng9i/ran adlı bir sunucu kullanıyorum

Ran: Go'da yazılmış basit bir statik web sunucusu

5
Colonel Panic

polpetta bir deneyin ...

npm yüklemek -g polpetta

o zaman yapabilirsin 

polpetta ~/klasör

ve gitmeye hazırsın :-)

4

live-server 'ı seviyorum. Hızlıdır ve geliştirme sırasında çok uygun olan bir Nice canlı yeniden yükleme özelliğine sahiptir.

Kullanımı çok basittir:

cd ~/Sites/
live-server

Varsayılan olarak IP 127.0.0.1 ve bağlantı noktası 8080 olan bir sunucu oluşturur.

http://127.0.0.1:8080/

8080 numaralı bağlantı noktası boş değilse, başka bir bağlantı noktası kullanır:

http://127.0.0.1:52749/

http://127.0.0.1:52858/

Web sunucusunu yerel ağınızdaki diğer makinelerde görmeniz gerekiyorsa, IP’nizin ne olduğunu kontrol edebilir ve kullanabilirsiniz:

live-server --Host=192.168.1.121

Ve burada otomatik olarak varsayılan arayüzün IP adresini alan bir betik. Sadece macOS'ta çalışır.

.bash_profile içine koyarsanız, live-server komutu sunucuyu otomatik olarak doğru IP ile başlatır.

# **
# Get IP address of default interface
# *
function getIPofDefaultInterface()
{
    local  __resultvar=$1

    # Get default route interface
    if=$(route -n get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}')
    if [ -n "$if" ]; then
            # Get IP of the default route interface
            local __IP=$( ipconfig getifaddr $if )
            eval $__resultvar="'$__IP'"
    else
        # Echo "No default route found"
        eval $__resultvar="'0.0.0.0'"
    fi
}

alias getIP='getIPofDefaultInterface IP; echo $IP'

# **
# live-server
# https://www.npmjs.com/package/live-server
# *
alias live-server='getIPofDefaultInterface IP && live-server --Host=$IP'
0
nico

Servez'i sunucu olarak kullanmak

  1. İndir Servez
  2. Kur, Çalıştır
  3. Sunulacak klasörü seçin
  4. "Başlat" ı seçin
  5. http://localhost:8080 adresine gidin veya "Tarayıcıyı Başlat" ı seçin

servez

Not: Bunu birlikte attım çünkü Chrome için Web Sunucusu Chrome uygulamalar için desteği kaldırdığından beri

0
gman