将java/kotlin对象发送到rsocket路由

ecbunoof  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(381)

我已经准备好了 @MessageMapping 端点使用spring的rsocket支持,并用 RSocketRequester . 这个流程运行得很好,因为spring为我们处理了一堆低级的东西。
现在,我希望有一些ui来显示我正在使用的任何数据,并通过它对这些数据进行ui更新 @MessageMapping 终结点。问题是,我不知道如何使用这两种方法将完整的java/kotlin对象(作为json)发送到我的端点 rsocket-java 或者 rsocket-kotlin 图书馆。因为我必须同时发送数据和元数据,元数据被编码为 ByteBuf 我不得不将json编码为 ByteBuf ,但它到达的端点都是乱七八糟的,无法反序列化。
我也尝试过发送原始字符串值,但它也会被发送到端点(一堆非utf字符)。我两个都试过了 APPLICATION_JSON 以及 TEXT_PLAIN 对于数据mime类型,但对这两种类型都不起作用。
另外,我猜我所做的任何错误都与java/kotlin库没有严格的关系,但是可以应用于任何其他现有的rsocket库(go、rust、js等)

kmpatx3s

kmpatx3s1#

如果您使用的是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()
    }
k3bvogb1

k3bvogb12#

我想我已经明白了。
我已经抓取了二进制编码的元数据,并借用了我在互联网上找到的javascript格式的rsocket,结果成功了:)
因此,解决方案是使用路由元数据mime类型(我使用复合,因为我发现的示例正在使用它),然后可以这样创建负载:

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

相关问题