问题标签 [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.
java - 使用keepalive的HttpServer非常慢
下面的 HttpServer 程序在没有 HTTP keepalive 的情况下可以轻松处理 8000 个请求/秒,但在使用 keepalive 的情况下只能处理 22 个请求/秒。
这是keepalive的样子:
请注意数据包 6、12 和 17 的巨大延迟。在第一个数据包之后,它们总是略高于 40 毫秒。相反,没有keepalive一切都很好:
在第一个毫秒结束之前,这是 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 毫秒延迟,以及如何使我的服务器更快?
java - 如何将 HttpServer 数据传递到不同的 URL
我正在使用使用 HTTP Server 的 com.sun.net 库编写一个基本的 http 代理,现在我的代理能够从客户端接收信息,但是一旦我拥有它,我如何将它传递给不同的 URL我指定的(服务器)?我将客户端硬编码为仅连接到我的代理 IP,因此我需要创建一个新请求,该请求使用相同的标头和正文传递到服务器。
我在我的句柄方法中可以访问的只是一个
所以这就是我必须用来提出新请求的东西。
java - 我的 Java 服务器应用程序中的内存泄漏
我有一个使用com.sun.net.HttpServer
API 实现的简单 Java 服务器应用程序。它几乎每秒接收 REST 请求,读取HashMap
一些文本的大文件,并在一些处理后简单地发回文本。服务器部分看起来像这样:
}
在作为 docker 容器运行时,我看到内存使用量随着时间的推移而增加,例如平均MB
几秒钟。显然,这里的某个地方发生了内存泄漏。是未使用的对象、j4logger
日志还是诸如此类的东西,我真的不知道。我只是尝试System.gc()
每隔几分钟显式调用一次。它做了一些补救措施,但我不确定问题出在哪里。
有什么问题以及如何解决?
编辑:我怎么知道问题来自程序的这一部分?好吧,我有其他线程负责HashMaps
每 5 分钟填充一次,然后去睡觉。即使那是在睡觉时,我也看到记忆力增加了。唯一的部分是该服务器每秒都在服务。
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
端点的杂散请求,但我不明白为什么这应该是必要的。
有谁知道为什么会这样?
java - Java:无法在 Catch 中发送 HTTP Post 请求
我需要将请求发布到 catch 内的 API 以存储一些日志。但是当我把它放在catch里面的时候,它返回了:
java.io.IOException: Server returned HTTP response code: 500 for URL
代码:
对 API 的代码发布请求;
java - com.sun.net.httpserver.HttpExchange 属性是否损坏?
首先一些(非常基本的)示例代码来说明我的问题:
在运行这个程序时(在 Java SE 1.8.0_171 上),如果我连续两次请求http://localhost:8666
,我会得到以下日志:
对于请求 #1,属性最初是null
,如预期的那样。但是对于请求 #2,属性是1
initial ,这似乎暗示初始值是从另一个请求继承的。更糟糕的是,如您所见,将2
请求 #2 的值更改为请求 #1 的值也会更改2
。似乎属性在HttpExchange
实例之间共享,这不是我所期望的。
我错过了什么还是HttpExchange
属性被破坏了?
java - 多线程 Java HTTP 服务器
我曾经sun.net.httpServer
在我的应用程序中运行 HTTP 服务器(不要问我为什么)。
问题是它只在一个线程中处理我的请求,所以我的吞吐量是一场灾难。
我想如果我setExecutor
的httpServer
这个问题会得到解决,但我开始在我的服务器端和客户端(SOAP-UI)上都出现异常。我测试了各种执行器,包括Executors.newCachedThreadPool
, Executors.newFixedThreadPool
, Executors.newWorkStealingPool
,Executors.newScheduledThreadPool
没有任何运气。
正如我所说,当我这样做时,我的代码工作正常setExecutor
,null
但在此配置中,我的代码按顺序处理请求。
我不知道该怎么办。这是我的代码:
当我设置 Executors 我得到这个错误
这是我的 RequestHandler 类:
而且我还在客户端收到此错误代码
java - 将多个 byte[] 放入单个响应体
我试图在我的响应正文中一次发送多个文件。我的问题是我无法将多个数组列表连接成一个,然后我可以将其重新分成多个文件。
这是我的代码(不起作用):
所以我的问题是:
如何使用 java 11 http 服务器将多个文件发送回单个 http 响应?
谢谢 !
更新 :
在 Joni 的帮助下修复我的代码后,我面临另一个问题:生成的 Zip 已损坏:
这是代码:
java - 通过 AWS Java SDK 从 S3 读取文本文件时出错
我试图通过 JAVA SDK v2 从 AWS S3 读取文本文件,并通过 HTTP(使用
com.sun.net.httpserver.HttpServer
)将其发送回客户端。我想将内容作为字符串读取。但是我下面的简单代码不起作用。
问题是什么?如何解决?
以下是错误: