Flutter RSocket客户端未连接到使用Spring Boot创建的RSocket API



我在玩RSocket在Flutter。我创建了两个RSocket api,如下所示:

@MessageMapping("stream")
Flux<Long> numbers(){
return Flux.interval(Duration.ofSeconds(1));
}
@MessageMapping("echo")
Mono<String> echo(String text){
return Mono.just(text);
}

并尝试连接并从他们那里获得答案,如:

var rsocket = await RSocketConnector.create().connect('tcp://127.0.0.1:7000');
var result = await rsocket.requestResponse!(
(Payload.fromText("message/x.rsocket.routing.v0: 4echo", "effd")));
print(result.getDataUtf8());
RSocketConnector.create()
.setupPayload(
Payload.fromText("message/x.rsocket.routing.v0: 6stream", ""))
.connect('tcp://127.0.0.1:7000')
.asStream()
.forEach((element) {
print(element);
});

。我可以使用RSocket命令行工具成功地调用我的后端,如rsc --route stream tcp://localhost:7000 --stream,它工作得很好。但是,Flutter客户端失败,出现以下错误:Unhandled Exception: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 41582

任何想法?

感谢@Richard Head的观点。我现在通过使用服务器从物理网络接口获得的IP地址使其工作。另外,为了能够设置正确的路由:

Payload routeAndDataPayload(String route, String data) {
var compositeMetadata =
CompositeMetadata.fromEntries([RoutingMetadata(route, List.empty())]);
var metadataBytes = compositeMetadata.toUint8Array();
var dataBytes = Uint8List.fromList(utf8.encode(data));
return Payload.from(metadataBytes, dataBytes);
}
RSocketConnector.create()
.connect('tcp://192.168.1.196:7000')
.asStream()
.asyncExpand((rSocket) =>
rSocket.requestStream!(routeAndDataPayload("stream", "")))
.forEach((element) => print(element!.getDataUtf8()));

我将PR Flutter RSocket,以便更轻松地创建路由有效负载。

最新更新