簡體   English   中英

Flutter RSocket 客戶端未連接到使用 Spring Boot 創建的 RSocket API

[英]Flutter RSocket client not connecting to RSocket API created using Spring Boot

我在 Flutter 中玩 RSocket。 我創建了兩個 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);
  });

. 我可以像rsc --route stream tcp://localhost:7000 --stream一樣使用 RSocket 命令行工具成功調用我的后端,並且效果很好。 但是,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 以獲得更簡單的方法來創建路由有效負載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM