我尝试使用 Java Servlet中的Java 8 CompletableFuture 异步处理http请求(然后在不使用AsyncContext的情况下实现Servlet 3.1的一种变体实现。
事实是,当我使用CompletableFuture时,即使我得到的httpCode为200,有时也会得到正确的答案,有时甚至根本没有响应。
当我尝试使用与CompletableFuture等效的 RxJava Observable 时,它工作正常。
这是我的Servlet代码,您可以找到注释的同步工作代码:
System.setProperty("webdriver.chrome.driver", "C:\\Users\\Selenium and drivers\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("http://the-internet.herokuapp.com/");
driver.manage().window().maximize();
System.out.println("Set up running");
// <<------your test scenario should be placed here
tearDown();
这是curl命令以及我得到的工作和不工作响应:
○→curl -v -i -X POST'http://localhost:8986/create/user/nio'-H'内容类型:application / json; charset = utf-8'-d'{“ name”:“ Alessandro”,“姓“:” Argentieri“}' 注意:不必要使用-X或--request,已经推断出POST。 *正在尝试:: 1 ... * TCP_NODELAY设置 *连接到localhost(:: 1)端口8986(#0) POST / create / user / nio HTTP / 1.1 主机:localhost:8986 用户代理:curl / 7.54.0 接受: / 内容类型:application / json; charset = utf-8 内容长度:45
- 完全释放上传:45个字节中的45个
{“ id”:“ ea3b8828-98a1-44f3-a938-40e79043d9db”,“名称”:“ Giorgio”,“姓氏”:“洛雷托”} *与主机localhost的连接#0保持不变
现在下一个响应为空:
○→curl -v -i -X POST'http://localhost:8986/create/user/nio'-H'内容类型:application / json; charset = utf-8'-d'{“ name”:“ Alessandro”,“姓“:” Argentieri“}' 注意:不必要使用-X或--request,已经推断出POST。 *正在尝试:: 1 ... * TCP_NODELAY设置 *连接到localhost(:: 1)端口8986(#0) POST / create / user / nio HTTP / 1.1 主机:localhost:8986 用户代理:curl / 7.54.0 接受: / 内容类型:application / json; charset = utf-8 内容长度:45
上传完全发送出去:45个字节中的45个
与主机localhost的连接#0保持不变
CompletableFuture有什么问题?