web-dev-qa-db-ja.com

Pythonのhttp.server(またはSimpleHTTPServer)に代わるもっと速いものは何ですか?

Pythonの http.server (またはPython 2の場合はSimpleHTTPServer)は、コマンドラインから現在のディレクトリの内容を提供する優れた方法です。

python -m http.server

しかし、Webサーバーに関する限り、それは非常に遅すぎます...

シングルスレッドのように動作し、RequireJSを使用してJavaScript AMDモジュールをロードするとタイムアウトエラーが発生することがあります。画像のない単純なページを読み込むのに5〜10秒かかることがあります。

同じくらい便利なより速い代替手段は何ですか?

278
Drew Noakes

http-server node.jsは非常に便利で、PythonのSimpleHTTPServerよりはるかに高速です。これは主に、リクエストを直列化するのではなく、リクエストの同時処理に非同期のIOを使用するためです。

Installation

まだインストールしていない場合は、node.jsをインストールしてください。次に、ノードパッケージマネージャ(npm)を使用してパッケージをインストールし、-gオプションを使用してグローバルにインストールします。 Windowsを使用している場合は、管理者権限のあるプロンプトが必要です。Linux/ OSXを使用している場合は、次のコマンドをSudoにする必要があります。

npm install http-server -g

これは必要な依存関係をダウンロードしてhttp-serverをインストールします。

つかいます

今、任意のディレクトリから、あなたは入力することができます:

http-server [path] [options]

Pathはオプションで、存在する場合は./publicにデフォルト設定されます。それ以外の場合は./です。

オプションは[defaults]です。

  • -p待機するポート番号[8080]
  • -a [localhost]にバインドするホストアドレス
  • -iディレクトリインデックスページを表示する[True]
  • -sまたは--silentサイレントモードではコンソールに記録されません
  • -hまたは--helpヘルプメッセージを表示して終了する

そのため、現在のディレクトリをポート8000​​で提供するには、次のように入力します。

http-server -p 8000
375
Drew Noakes

私はお勧め:ツイストhttp://twistedmatrix.com

pythonで書かれ、オープンソースMITライセンスの下でライセンスされているイベント駆動型ネットワーキングエンジン。

クロスプラットフォームで、OS X 10.5から10.12にプレインストールされています。他のものの中で、あなたは現在のディレクトリで簡単なウェブサーバを起動することができます:

twistd -no web --path=.

詳細

オプションの説明(詳細はtwistd --helpを参照):

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

"web"は、Twisted非同期エンジンの上で単純なWebサーバーを実行するコマンドです。これはコマンドラインオプションも受け付けます( "web"コマンドの後 - 詳細はtwistd web --helpを参照)。

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

以下のような他のコマンドもたくさんあります。

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

ウブンツ

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

Mac OS-X(10.5 - 10.12にプレインストールされている、またはMacPortsでそしてPipを通して利用可能である)

Sudo port install py-twisted

Windows

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

HTTPS

Twistedはセキュリティ証明書を利用して接続を暗号化することもできます。これを既存の--pathおよび--port(プレーンHTTP用)オプションと共に使用します。

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

go 1.0には数行のコードで http serverファイルを提供するためのutil が含まれます。

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

go run myserver.goを使用してこのソースを実行するか、実行可能ファイルgo build myserver.goを構築します。

25
pd40

webfs を試してください。これは小さいので、node.jsやpythonなどのプラットフォームをインストールすることには依存しません。

19
Hudon

Mercurialを使っているなら、内蔵のHTTPサーバを使うことができます。あなたが提供したいフォルダの中で:

hg serve

から ドキュメント

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

これはもう一つです。ChromeExtensionです

インストールしたら、Chromeで新しいタブを作成し、左上近くのアプリボタンをクリックして実行できます。

それは簡単なGUIを持っています。フォルダの選択をクリックしてから、http://127.0.0.1:8887リンクをクリックします。

enter image description here

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

10
gman

私はpython -m http.serverが信頼できないことを見つけました - いくつかの応答は数秒かかるでしょう。

今私はRanと呼ばれるサーバーを使用しています https://github.com/m3ng9i/ran

Ran:Goで書かれた簡単な静的Webサーバ

6
Colonel Panic

devd goで書かれた小さなWebサーバーも考えてください。多くのプラットフォーム用のバイナリが利用可能です ここ

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

それは小さく、速く、そしてあなたのファイルが変わったときにライブリロードのようないくつかの興味深いオプション機能を提供します。

6
gman

polpettaを試してみる...

npm install -g polpetta

それならあなたはできます

polpetta〜/フォルダ

そしてあなたは行く準備ができています:-)

4

サーバーとしてServezを使用する

  1. ダウンロード Servez
  2. インストールして実行する
  3. 提供するフォルダを選択してください
  4. 「開始」を選ぶ
  5. http://localhost:8080に行くか、「ブラウザを起動」を選択してください。

servez

注:Web Server for Chromeは Chromeはアプリのサポートを廃止しています 以降廃止されたため、またコマンドラインの経験がまったくない芸術生をサポートしているため、これを一緒に投げました。

2
gman

私は live-server が好きです。それは速く、開発中に非常に便利であるニースライブリロード機能を持っています。

使い方はとても簡単です。

cd ~/Sites/
live-server

デフォルトでは、IP 127.0.0.1、ポート8080のサーバーを作成します。

http://127.0.0.1:8080/

ポート8080が空いていない場合は、別のポートを使用します。

http://127.0.0.1:52749/

http://127.0.0.1:52858/

ローカルネットワークの他のマシンにあるWebサーバーを見る必要がある場合は、自分のIPアドレスを確認して次のように使用します。

live-server --Host=192.168.1.121

そして、これがデフォルトのインターフェースのIPアドレスを自動的に取得するスクリプトです。 これはmacOSでのみ動作します

.bash_profileに入れると、live-serverコマンドは正しいIPで自動的にサーバーを起動します。

# **
# 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'
1
nico