从 RestController 中的 TCP 服务器获取响应

Get response from TCP server in RestController

我的 Spring webflux 控制器需要访问远程 TCP 服务器。我怎样才能将响应从 TCP 服务器流式传输到客户端?

类似于:

WebClient client = WebClient.create("http://example.com");

....

@GetMapping(value = "/account")
public Mono<String> account() {
  Mono<Account> account = client.get()
        .url("/accounts/{id}", 1L)
        .accept(APPLICATION_JSON)
        .exchange(request)
        .then(response -> response.bodyToMono(Account.class));

  return account;
}

但是使用 TcpClient(不是 WebClient)。

谢谢,

--尼克

遗憾的是,SpringWebFlux确实有点侧重于HTTP。

reactor-netty 中有一个 TcpClient,但它的级别较低,需要一些 netty 知识(因为您必须自己执行诸如成帧和解码之类的操作)。而且它没有像 HttpClient 那样的 Response 的概念,所以它不容易桥接成 Mono/Flux 然后你可以在你的控制器中转换...

所以恐怕目前还没有针对该特定用例的现成解决方案:/ 不过我建议您 open an issue