Java HttpExchange.getRemoteAddress()需要很长时间

Java HttpExchange.getRemoteAddress()需要很长时间,java,http,Java,Http,我正在创建运行在Java HttpServer类上的服务器,一切正常,但我注意到调用exchange.getRemoteAddress().getAddress().getCanonicalHostName()大约需要4000毫秒,但是即使我删除了getRemoteAddress(),读取请求正文也很快。有人知道为什么HttpExchange.getRemoteAddress()需要这么长时间吗? 从服务器登录: [pool-1-thread-1 | 13:25:54] Received req

我正在创建运行在Java HttpServer类上的服务器,一切正常,但我注意到调用
exchange.getRemoteAddress().getAddress().getCanonicalHostName()
大约需要4000毫秒,但是即使我删除了getRemoteAddress(),读取请求正文也很快。有人知道为什么HttpExchange.getRemoteAddress()需要这么长时间吗? 从服务器登录:

[pool-1-thread-1 | 13:25:54] Received request from 192.168.0.104 / Obtaining remote address took 4538 ms
[pool-1-thread-1 | 13:25:54] Downloading request body from 192.168.0.104 took 0 ms
[pool-1-thread-1 | 13:25:54] Generating response body from 192.168.0.104 took 6 ms
[pool-1-thread-1 | 13:25:54] Processing lock request from 192.168.0.104
将exchange.getRemoteAddress().getAddress().getCanonicalHostName()替换为硬编码字符串(“测试”)时的日志:

编辑: 我的失败,没有正确阅读
getCanonicalHostName()
文档。它清楚地说

获取此IP地址的完全限定域名。尽力 方法,这意味着我们可能无法返回FQDN,具体取决于 底层系统配置


替换为
getHostAddress()

,这是因为查找给定IP地址的主机名通常会涉及一个网络查询(或一系列查询),这是一个昂贵的操作,自然比使用硬编码字符串值慢得多

[pool-1-thread-1 | 13:28:00] Received request from test / Obtaining remote address took 0 ms
[pool-1-thread-1 | 13:28:00] Downloading request body from test took 1 ms
[pool-1-thread-1 | 13:28:00] Generating response body from test took 7 ms
[pool-1-thread-1 | 13:28:00] Processing lock request from test