什么是更快的替代Python's http。服务器(或SimpleHTTPServer)?

Python的http.server(或SimpleHTTPServer for Python 2)是一种从命令行提供当前目录内容的好方法:

python -m http.server

然而,就网络服务器而言,它是非常缓慢的…

它的行为就像它是单线程的,并且在使用RequireJS加载JavaScript AMD模块时偶尔会导致超时错误。加载一个没有图像的简单页面可能需要5到10秒钟。

还有什么更快更方便的选择吗?

164970 次浏览

node.js的http服务器非常方便,并且比Python的SimpleHTTPServer快得多。这主要是因为它使用异步IO来并发处理请求,而不是序列化请求。

安装

如果你还没有安装node.js。然后使用节点包管理器(npm)安装包,使用-g选项进行全局安装。如果你在Windows上,你将需要一个具有管理员权限的提示符,而在Linux/OSX上,你将需要sudo命令:

npm install http-server -g

这将下载所需的依赖项并安装http-server

使用

现在,在任何目录下,你都可以输入:

http-server [path] [options]

Path是可选的,如果存在,默认为./public,否则为./. Path。

选项为[默认值]:

  • -p监听的端口号[8080]
  • -a绑定到[localhost]的主机地址
  • -i显示目录索引页[True]
  • -s--silent沉默模式将不会登录到控制台
  • -h--help显示帮助信息并退出

因此,要在端口8000上提供当前目录,输入:

http-server -p 8000

如果使用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

试试polpetta吧…

npm install -g polpetta

然后你就可以

polpetta ~/folder

你已经准备好了:-)

1.0包含一个http服务器 &用于提供文件的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运行此源代码

我推荐:扭曲的 (http://twistedmatrix.com)

一个事件驱动的网络引擎,用Python编写,使用开源MIT许可。

它是跨平台的,预装在OS X 10.5到10.12上。除此之外,你可以在当前目录中启动一个简单的web服务器:

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

安装

Ubuntu

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

窗户

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

HTTPS

Twisted还可以使用安全证书对连接进行加密。将此与您现有的--path--port(用于普通HTTP)选项一起使用。

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

尝试webfs,它很小,不依赖于安装node.js或python这样的平台。

也可以考虑devd是一个用go编写的小型web服务器。许多平台的二进制文件都可用在这里

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

它体积小,速度快,并提供了一些有趣的可选功能,如当文件更改时实时重新加载。

我发现python -m http.server不可靠——一些响应需要几秒钟。

现在我使用一个名为Ran https://github.com/m3ng9i/ran的服务器

Ran:一个用Go语言编写的简单静态web服务器

这是另一个。这是一个Chrome扩展

安装完成后,你可以在Chrome中创建一个新选项卡,然后点击左上角的应用程序按钮来运行它

它有一个简单的gui。单击选择文件夹,然后单击http://127.0.0.1:8887链接

enter image description here

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

使用Servez作为服务器

  1. 下载Servez
  2. 安装,运行
  3. 选择要服务的文件夹
  4. 选择“开始”
  5. 转到http://localhost:8080或选择“启动浏览器”

servez

注:我之所以把这些放在一起是因为Chrome的Web服务器从Chrome正在移除对应用程序的支持开始就消失了,而且因为我支持那些对命令行没有任何经验的艺术学生

我喜欢活动服务器。它是快速的,有一个很好的实时加载功能,这是非常方便的开发过程中。

用法非常简单:

cd ~/Sites/
live-server

默认情况下,它创建一个IP为127.0.0.1,端口为8080的服务器。

< a href = " http://127.0.0.1:8080 " rel =“nofollow”noreferrer > http://127.0.0.1:8080 < / >

如果8080端口没有空闲,它将使用其他端口:

< a href = " http://127.0.0.1:52749 " rel =“nofollow”noreferrer > http://127.0.0.1:52749 < / >

< a href = " http://127.0.0.1:52858 " rel =“nofollow”noreferrer > 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'

另一个基于节点的简单命令行服务器

https://github.com/greggman/servez-cli

部分是为了响应http服务器存在的问题,特别是在windows上。

安装

安装node . js然后

npm install -g servez

使用

servez [options] [path]

如果没有路径,它将提供当前文件夹。

默认情况下,它为文件夹路径提供index.html(如果存在的话)。否则,它为文件夹提供目录列表。它还提供CORS报头。你可以选择使用--username=somename --password=somepass开启基本身份验证,也可以使用https。

如果你安装了PHP,你可以使用内置服务器。

php -S 0:8080

在过去的几年里,我一直在使用filebrowser,它是我发现的最好的替代方案。

我喜欢它的特点:

  • 跨平台:支持Linux、MacOs和Windows (+)。它还支持docker (+)
  • 下载东西是件轻而易举的事。它可以自动将文件夹转换为ziptar.gz等,用于转移文件夹。
  • 您可以访问文件或文件夹的每一个用途。

enter image description here