我正在构建一个需要同时处理多个请求的 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)
目标是根据系统中的可用处理器仅创建给定数量的线程。
这行得通吗?
提前致谢!!
我在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) 我正在使用 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
我应该运行什么命令才能停止它?
我在 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) 语境
我正在尝试为查询外部 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) 我是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
我有一个使用 http.server 的小型演示页面。我尝试与同事共享,但发现 http.server 在任何打开的连接上仍然被阻止,因此无法为并发用户提供服务。有没有办法运行 http.server 来处理并发连接?我在这里没有发现任何有用的东西:https ://docs.python.org/3/library/http.server.html
我们使用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错误
有没有办法解决这个问题?
我的 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) 我正在制作一个简单的 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) 我使用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)
我怎样才能做到这一点?
httpserver ×10
go ×3
java ×2
python ×2
archive ×1
erlang ×1
executors ×1
heroku ×1
html5-video ×1
http ×1
json ×1
localhost ×1
node.js ×1
npm ×1
react-router ×1
reactjs ×1
router ×1
shell ×1
unit-testing ×1
zip ×1