从 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。
我的 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。