【问题标题】:Sending Java/Kotlin objects to RSocket route将 Java/Kotlin 对象发送到 RSocket 路由
【发布时间】:2020-11-25 17:10:48
【问题描述】:

我已经使用 Spring 的 RSocket 支持设置了 @MessageMapping 端点,并使用 RSocketRequester 对其进行了测试。这个流程运行良好,因为 Spring 为我们处理了一堆低级的东西。

现在,我想要某种 UI 来显示我正在使用的任何数据,并通过提到的 @MessageMapping 端点对这些数据进行任何 UI 更新。问题是我不知道如何使用rsocket-javarsocket-kotlin 库将完整的Java/Kotlin 对象(作为JSON)发送到我的端点。由于我必须同时发送数据和元数据,并且元数据被编码为ByteBuf,我不得不将 JSON 编码为ByteBuf,但它涉及到的端点都搞砸了,无法反序列化。

我也尝试过发送原始字符串值,它也涉及到端点都搞砸了(一堆非 UTF 字符)。我已经尝试过 APPLICATION_JSONTEXT_PLAIN 的数据 mime 类型,但都没有。

另外,我想我做错的任何事情都与 Java/Kotlin 库没有严格的关系,但可以应用于任何其他现有的 RSocket 库(Go、Rust、JS 等)

【问题讨论】:

    标签: java spring kotlin rsocket


    【解决方案1】:

    如果您使用的是 rsocket-kotlin 客户端(不是基于 spring-boot 构建的),那么您可以从 https://github.com/rsocket/rsocket-cli/blob/master/src/main/kotlin/io/rsocket/cli/Main.kt 复制代码

    它为路由构建元数据

        this.route != null -> {
          CompositeMetadata(RoutingMetadata(route!!)).toPacket().readBytes()
        }
    

    【讨论】:

      【解决方案2】:

      我想我已经想通了。

      我已经抓取了二进制编码的元数据,并借用了我在 Internet 上找到的用于 JavaScript 中的 RSocket 的内容,并且它起作用了 :)

      因此,解决方案是使用路由元数据 mime 类型(我使用复合,因为我发现示例正在使用它),然后可以像这样创建有效负载:

      val json = "{}"
      val route = "myawesomeroute"
      DefaultPayload.create(<json>, "${route.length.toChar()}$route")
      

      【讨论】:

        猜你喜欢
        • 2016-11-06
        • 1970-01-01
        • 2020-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 1970-01-01
        相关资源
        最近更新 更多