HttpClient发送请求后不等待响应

3

我正在尝试创建一个Java控制器类,以完成以下任务:

  1. 接收一个请求并进行处理。

  2. 在处理完成且返回语句之前,我实例化了一个Httpclient,并尝试像当前请求一样向另一个服务器发送一个请求。

我已经完成了这些任务。但是我想知道这里发生了什么:(下面)

HttpResponse response=client.execute(post);// will the program blocks here ? 

在我搜索互联网时,似乎程序会阻塞,这不是我想要的。

我还了解了一些异步操作的知识,但好像它仍然需要一些时间来处理响应。(不太确定)

我怎样才能只发送请求,而不关心响应。这可能吗?

如果我把事情搞砸了,请原谅。如果您能给我一些建议或者对这个话题提出一些建议,那将非常友善。谢谢。


“仍需一些时间”是什么意思?您是否担心最终会收到多少数据?您是否真的不关心请求是否失败(例如,服务器宕机或响应500)? - Jon Skeet
不要因为请求失败就停下来,继续执行。 - user2749336
那么,就异步调用而言,你确切地关心什么? - Jon Skeet
我想知道,即使我选择忽略异步调用的响应,它是否仍会占用资源? - user2749336
可能会有一些验证等处理,但在这个阶段优化似乎为时过早。为什么不直接实现并进行测试呢?你特别关注哪些资源? - Jon Skeet
显示剩余2条评论
2个回答

1

我最喜欢的Java异步HTTP库是AsyncHttpClient

如果您不关心处理响应,则可以只执行以下操作:

AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
Future<Response> f = asyncHttpClient.preparePost("http://www.myurlhere.com/").execute();

然后就忘记它吧。


我会去尝试一下。谢谢。就个人而言,我不理解asynHttpClient在响应返回之前发生了什么?它在内存中等待吗?那么当未来的响应返回时会发生什么?如果没有响应会怎样? - user2749336
是的,它正在运行在一个独立的线程中,基本上在等待。如果没有响应,我假设它会继续等待,但这不应该发生。即使出现像连接问题这样的错误,它也会抛出一个错误并返回 Future。 - William Gaul

0

谢谢你的“未来参考”,我会深入研究RFC事项。 - user2749336

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接