标签: httpserver

在 HTTPServer 中的 Executors.newFixedThreadPool 中设置可用处理器

我正在构建一个需要同时处理多个请求的 HTTPServer。

我构建的主要功能如下:

public static void main(String[] args) throws Exception {
    HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
    server.createContext("/", new MyRequestDispatcher());

    server.setExecutor(Executors.newCachedThreadPool());
    server.start();
}
Run Code Online (Sandbox Code Playgroud)

现在我正在考虑它如何Executors.newCachedThreadPool()在创建的线程数量方面发挥作用。正如我所读到的,要创建的线程数量不受限制,如果我同时收到一千个请求,它会创建一千个线程吗?

我正在考虑限制同时创建的线程数量,以便在运行它的机器中正确处理。我想到了这样的事情:

Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())
Run Code Online (Sandbox Code Playgroud)

目标是根据系统中的可用处理器仅创建给定数量的线程。

这行得通吗?

提前致谢!!

java multithreading httpserver executors

3
推荐指数
1
解决办法
2037
查看次数

如何在golang中构建自己的简单路由器?

我在golang中构建自己的路由器以理解逻辑,但是我得到404错误,通常没有找到,我能够运行到服务器但是我用hello名称写了函数,它没有运行.这可能是什么原因?

package main
import (
    "fmt"
    "log"
    "net/http"
    "strings"
    "time"
)

var Session *http.Server
var r Router

func Run(port string) {
    Session = &http.Server{
        Addr:           port,
        Handler:        &r,
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
        MaxHeaderBytes: 1 << 20,
    }
    log.Fatal(Session.ListenAndServe())
}

type Handle func(http.ResponseWriter, *http.Request)

type Router struct {
    mux map[string]Handle
}

func newRouter() *Router {
    return &Router{
        mux: make(map[string]Handle),
    }
}

func (r *Router) Add(path string, handle Handle) {
    r.mux[path] = handle
}

func GetHeader(url …
Run Code Online (Sandbox Code Playgroud)

router go httpserver

3
推荐指数
1
解决办法
2442
查看次数

如何停止特定端口上的http服务器?

我正在使用 http-server 来将http://localhost:8484加载到特定文件夹上。(出于测试目的)我在代码中运行的操作系统命令是:

http-server -p 8484 test/
Run Code Online (Sandbox Code Playgroud)

下载完我运行的任何内容后:

http-server stop
Run Code Online (Sandbox Code Playgroud)

然而,测试完成后,我看到端口8484的http服务器仍然存在!

通过跑步ps aux | grep http

我应该运行什么命令才能停止它?

  • 我使用的是 Mac OSX(El Capitan 版本)
  • 我在 erlang 中编写代码(尽管我认为这并不重要,因为我从代码中运行 shell 命令)。
  • http-服务器:https: //www.npmjs.com/package/http-server

我在 erlang 中的代码:

my_test_() ->
  Pid = spawn(fun() ->
          Info = os:cmd("http-server -p 8484 test/resources"),
          io:format(user,"*** Server: ~p~n",[Info])
        end),

%%% Do some job %%%

  Pid2 = spawn(fun() ->
           Info = os:cmd("http-server stop"),
           timer:sleep(200),
           io:format(user,"*** Server stop: ~p~n",[Info])
         end),
  timer:sleep(200),
  exit(Pid2, kill),
  exit(Pid, kill).
Run Code Online (Sandbox Code Playgroud)

shell erlang operating-system localhost httpserver

3
推荐指数
1
解决办法
2万
查看次数

模拟外部 API 以使用 Python 进行测试

语境

我正在尝试为查询外部 API 的函数编写测试。这些函数向 API 发送请求、获取响应并处理它们。在我的测试中,我想使用本地运行的模拟服务器来模拟外部 API。到目前为止,模拟服务器已成功运行并响应自定义 GET 查询。

问题

外部 API 使用 type 的对象进行响应<class 'dict'>,而显然我可以从模拟服务器获得的只是 type 的响应<class 'bytes'>。模拟服务器从磁盘获取预定义的数据并通过流返回它们。由于我无法模拟外部 API,因此我的测试会因响应类型错误而抛出错误消息。

以下是我的代码片段和一些解释。

1.setUp ()函数:

setUp 函数在测试套件的开头运行。它负责在运行测试之前配置和运行服务器:

def setUp(self):
    self.factory = APIRequestFactory()
    # Configuring the mock server
    self.mock_server_port = get_free_port()
    self.mock_server = HTTPServer(('localhost', self.mock_server_port), MockServerRequestHandler)
    # Run the mock server in a separate thread
    self.mock_server_thread = Thread(target=self.mock_server.serve_forever)
    self.mock_server_thread.setDaemon(True)
    self.mock_server_thread.start()
Run Code Online (Sandbox Code Playgroud)

2. MockServerClassHandler:

class MockServerRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
    if re.search(config.SYSTEM_STATUS_PATTERN, self.path):
        # Response status code
        self.send_response(requests.codes.ok)
        # Response headers
        self.send_header("Content-Type", "application/json; …
Run Code Online (Sandbox Code Playgroud)

python json unit-testing httpserver web-api-testing

3
推荐指数
1
解决办法
1万
查看次数

Visual Studio代码集成终端:http-server:无法识别术语“ http-server”

我是Angular的新手,因此是Visual Studio Code的新手。我通过遵循在线教程开始了我的第一个Angular应用程序。当我尝试在VS代码集成终端上执行http服务器时,出现以下错误。我找不到,如何解决。

PS C:\ MyFolder \ Learning \ Angular> http-server http-server:术语“ http-server”未被识别为cmdlet,函数,脚本文件或可运行程序的名称。检查名称的拼写,或者是否包含路径,请验证路径是否正确,然后重试。在第1行:char:1 + http-server + ~~~~~~~~~~~ + CategoryInfo:ObjectNotFound:(http-server:String)[],CommandNotFoundException + FullyQualifiedErrorId:CommandNotFoundException

httpserver node.js npm

3
推荐指数
1
解决办法
2921
查看次数

python -m http.server 可以配置为处理并发请求吗?

我有一个使用 http.server 的小型演示页面。我尝试与同事共享,但发现 http.server 在任何打开的连接上仍然被阻止,因此无法为并发用户提供服务。有没有办法运行 http.server 来处理并发连接?我在这里没有发现任何有用的东西:https ://docs.python.org/3/library/http.server.html

python http simplehttpserver httpserver

3
推荐指数
1
解决办法
3430
查看次数

使用 http-server 响应路由器

我们使用react-roucter-domwith http-server,当用户加载主页面并点击导航链接时,新页面将完美加载,但是当用户在该路由中刷新页面时,它返回404。这意味着 HTML5pushState不适用于http-server.

例子 :

<Router>
    <Route exact path="/" component={Home} />
    <Route path="/about" component={About} />
    <Route path="/topics" component={Topics} />
</Router>
Run Code Online (Sandbox Code Playgroud)

如果用户转到/about页面并刷新它,则会发生404错误

有没有办法解决这个问题?

httpserver reactjs react-router

3
推荐指数
1
解决办法
3747
查看次数

在heroku上部署golang应用程序,构建成功但应用程序错误

我的 golang 应用程序在我的本地主机的端口 9000 上运行。使用 godep 支持将其部署在 Heroku 后,我能够在 Heroku 上推送和部署。但是,当我尝试访问端点(例如“/”)时,它显示应用程序错误。您可以在下面看到我在 Heroku 部署时的代码和日志

package main

import (
    "log"
    "fmt"
    "net/http"
    "os"

    "github.com/gorilla/mux"
    "github.com/gorilla/context"

    "gopkg.in/paytm/grace.v1"

    // utilhttp "bitbucket.org/michaelchandrag/chit/pkg/util/http"
    // util "bitbucket.org/michalechandrag/chit/pkg/util"
)

func main() {
    log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ CHIT STARTED $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")
    log.Println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")

    muxRouter := mux.NewRouter()

    muxRouter.HandleFunc("/", Articles)
    http.Handle("/", muxRouter)

    // err = grace.Serve(":"+cfg.Server.Port, context.ClearHandler(http.DefaultServeMux))
    err := grace.Serve(":9000", context.ClearHandler(http.DefaultServeMux))
    if err != nil {
        log.Println("[ERROR GRACEFUL]", err)
        os.Exit(1)
    }

    os.Exit(0)
}

func Articles(w http.ResponseWriter, r *http.Request) {
    // vars := mux.Vars(r)
    w.WriteHeader(http.StatusOK)
    fmt.Fprintf(w, "Hello") …
Run Code Online (Sandbox Code Playgroud)

heroku go httpserver

3
推荐指数
1
解决办法
2850
查看次数

如果传输状态为 206 部分内容,Chrome 将无法加载视频

我正在制作一个简单的 Javacom.sun.net.httpserver.HttpServer来提供静态视频文件。如果我返回状态代码 206(部分内容),当我尝试通过浏览器访问它时,视频无法播放(视频在状态代码 200 下播放正常,但我希望能够查找并循环播放视频),这是我的HttpHandler

final String path = StaticHandler.toPathSafe(httpExchange.getRequestURI().getPath());
System.out.println(path);
final File file = new File(path);

if (file.isFile())
{
    int code = 200;
    long position = 0L;
    long end = file.length();

    if (httpExchange.getRequestHeaders().containsKey("Range"))
    {
        try
        {
            long[] range = StaticHandler.parseRange(httpExchange.getRequestHeaders().get("Range").get(0));

            position = range[0];
            if (range[1] != -1)
                end = range[1];

            // the video loads fine when code = 200;
            code = 206;

            httpExchange.getResponseHeaders().set("Content-Range", "bytes " + position + "-" + end + "/" + file.length()); …
Run Code Online (Sandbox Code Playgroud)

java google-chrome video-streaming httpserver html5-video

3
推荐指数
1
解决办法
1万
查看次数

如何使用 Gin 在 HTTP 服务器中动态生成 zip/7z 存档?

我使用Gin创建了一个 HTTP 服务器,我想为用户提供一个动态生成的 zip 存档。

理论上我可以先在文件系统上生成一个 zip 文件,然后再提供它。但这确实是一种糟糕的方式(在开始下载之前等待 5 分钟)。我想立即开始将其提供给用户并在生成时推送内容。

我找到了 DataFromReader(示例),但在存档完成之前不知道 ContentLength。

func DownloadEndpoint(c *gin.Context) {
    ...
    c.DataFromReader(
        http.StatusOK,
        ContentLength,
        ContentType,
        Body,
        map[string]string{
            "Content-Disposition": "attachment; filename=\"archive.zip\""),
        },
    )
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

zip archive go httpserver

3
推荐指数
1
解决办法
1089
查看次数