问题标签 [com.sun.net.httpserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1795 浏览

java - 使用keepalive的HttpServer非常慢

下面的 HttpServer 程序在没有 HTTP keepalive 的情况下可以轻松处理 8000 个请求/秒,但在使用 keepalive 的情况下只能处理 22 个请求/秒。

这是keepalive的样子:

带有 HTTP keepalive 的 Wireshark 屏幕截图

请注意数据包 6、12 和 17 的巨大延迟。在第一个数据包之后,它们总是略高于 40 毫秒。相反,没有keepalive一切都很好:

没有 HTTP keepalive 的 Wireshark 截图

在第一个毫秒结束之前,这是 3 个完整的请求!

我在 debian sid Linux amd64 上使用 OpenJDK 8,客户端和服务器都在同一台机器上,并通过 localhost 接口进行通信。为了测试,我使用ab -n 100000 -c 1 http://localhost:30006/(no keepalive) 和ab -n 100000 -c 1 -k http://localhost:30006/(keepalive),以及 curl 和 chromium(默认情况下都使用 keepalive)。

那么是什么导致了 HTTP keepalive 请求的 40 毫秒延迟,以及如何使我的服务器更快?

0 投票
0 回答
23 浏览

java - 如何将 HttpServer 数据传递到不同的 URL

我正在使用使用 HTTP Server 的 com.sun.net 库编写一个基本的 http 代理,现在我的代理能够从客户端接收信息,但是一旦我拥有它,我如何将它传递给不同的 URL我指定的(服务器)?我将客户端硬编码为仅连接到我的代理 IP,因此我需要创建一个新请求,该请求使用相同的标头和正文传递到服务器。

我在我的句柄方法中可以访问的只是一个

所以这就是我必须用来提出新请求的东西。

0 投票
1 回答
278 浏览

java - 我的简单 Java HTTPServer 中的特殊字符编码

0 投票
0 回答
74 浏览

java - 我的 Java 服务器应用程序中的内存泄漏

我有一个使用com.sun.net.HttpServerAPI 实现的简单 Java 服务器应用程序。它几乎每秒接收 REST 请求,读取HashMap一些文本的大文件,并在一些处理后简单地发回文本。服务器部分看起来像这样:

}

在作为 docker 容器运行时,我看到内存使用量随着时间的推移而增加,例如平均MB几秒钟。显然,这里的某个地方发生了内存泄漏。是未使用的对象、j4logger日志还是诸如此类的东西,我真的不知道。我只是尝试System.gc()每隔几分钟显式调用一次。它做了一些补救措施,但我不确定问题出在哪里。

有什么问题以及如何解决?

编辑:我怎么知道问题来自程序的这一部分?好吧,我有其他线程负责HashMaps每 5 分钟填充一次,然后去睡觉。即使那是在睡觉时,我也看到记忆力增加了。唯一的部分是该服务器每秒都在服务。

0 投票
0 回答
533 浏览

java - 为什么 HttpContext 接受来自所有以指定路径开头的 URI 的请求?

我有一个使用以下 java 版本运行的 java 应用程序

我正在研究使用 java 中的内置 HttpServer,并注意到带有 HttpContext 的 HttpContextpath=/foo将接受以所述路径开头的 uri 请求,例如/foo123 /foobar /fooxxx.

如果我进入邮递员并向localhost:8080/context终端窗口中观察到以下输出的 GET 请求:

如果我向/contextBar以下输出发送请求,则会看到

我曾简要地研究过使用import com.sun.net.httpserver.Filter它来拒绝任何进入我的/context端点的杂散请求,但我不明白为什么这应该是必要的。

有谁知道为什么会这样?

0 投票
0 回答
58 浏览

java - Java:无法在 Catch 中发送 HTTP Post 请求

我需要将请求发布到 catch 内的 API 以存储一些日志。但是当我把它放在catch里面的时候,它返回了: java.io.IOException: Server returned HTTP response code: 500 for URL

代码:

对 API 的代码发布请求;

0 投票
1 回答
230 浏览

java - com.sun.net.httpserver.HttpExchange 属性是否损坏?

首先一些(非常基本的)示例代码来说明我的问题:

在运行这个程序时(在 Java SE 1.8.0_171 上),如果我连续两次请求http://localhost:8666,我会得到以下日志:

对于请求 #1,属性最初是null,如预期的那样。但是对于请求 #2,属性是1initial ,这似乎暗示初始值是从另一个请求继承的。更糟糕的是,如您所见,将2请求 #2 的值更改为请求 #1 的值也会更改2。似乎属性在HttpExchange实例之间共享,这不是我所期望的。

我错过了什么还是HttpExchange属性被破坏了?

0 投票
1 回答
833 浏览

java - 多线程 Java HTTP 服务器

我曾经sun.net.httpServer在我的应用程序中运行 HTTP 服务器(不要问我为什么)。

问题是它只在一个线程中处理我的请求,所以我的吞吐量是一场灾难。

我想如果我setExecutorhttpServer这个问题会得到解决,但我开始在我的服务器端和客户端(SOAP-UI)上都出现异常。我测试了各种执行器,包括Executors.newCachedThreadPool, Executors.newFixedThreadPool, Executors.newWorkStealingPool,Executors.newScheduledThreadPool没有任何运气。

正如我所说,当我这样做时,我的代码工作正常setExecutornull但在此配置中,我的代码按顺序处理请求。

我不知道该怎么办。这是我的代码:

当我设置 Executors 我得到这个错误

这是我的 RequestHandler 类:

而且我还在客户端收到此错误代码

0 投票
1 回答
102 浏览

java - 将多个 byte[] 放入单个响应体

我试图在我的响应正文中一次发送多个文件。我的问题是我无法将多个数组列表连接成一个,然后我可以将其重新分成多个文件。

这是我的代码(不起作用):

所以我的问题是:

如何使用 java 11 http 服务器将多个文件发送回单个 http 响应?

谢谢 !

更新 :

在 Joni 的帮助下修复我的代码后,我面临另一个问题:生成的 Zip 已损坏:

这是代码:

0 投票
1 回答
122 浏览

java - 通过 AWS Java SDK 从 S3 读取文本文件时出错

我试图通过 JAVA SDK v2 从 AWS S3 读取文本文件,并通过 HTTP(使用 com.sun.net.httpserver.HttpServer)将其发送回客户端。我想将内容作为字符串读取。但是我下面的简单代码不起作用。

问题是什么?如何解决?

以下是错误: