我正在尝试对缺少文档的最新 reactor-netty 版本进行一些项目前体验;我使用的是 0.8.0.M3 版本。
我用这个 tcp 服务器开发了一个简单的 spring boot 应用程序,它可以正确启动并且似乎可以工作:
@PostConstruct
public void startServer() throws InterruptedException {
TcpServer.create().
host("localhost").
port(1235).
handle((in, out) -> {
Flux<String> fluxString = in.receive().asString().log().
map(text -> {
return "Hi server have received "+text;});
return out.sendString(fluxString).then();
}
).
wiretap().bindNow();
}
如果我尝试使用客户端进行测试,交互似乎是正确的,但我无法收到任何响应:
int counter = 10;
CountDownLatch latch = new CountDownLatch(counter);
Flux<String> input = Flux.range(0, counter).map(i->""+i);
TcpClient.create().
host("localhost").
port(1235).
handle((in, out) -> {
in.receive().subscribe(receiv -> {System.out.println(receiv);latch.countDown();});
return out.sendString(input).neverComplete();
}
).
wiretap().connectNow();
System.out.println("waiting closure");
boolean result = latch.await(5, TimeUnit.SECONDS);
查看窃听日志似乎客户端分别将每个 int 作为字符串发送,而服务器仅接收一个聚合字符串“0123456789”并仅发送一个响应。客户端没有收到任何东西,并且锁存器也没有减少 1 并且保持在 10(我希望至少收到一个聚合响应)。
谁能解释客户端出了什么问题以及如何由服务器分别接收每个整数?
谢谢