我已经使用Spring的RSocket支持设置了@MessageMapping端点,并使用RSocketRequester对其进行了测试。这个流程工作得很好,因为Spring为我们处理了一堆低级的东西。
现在,我希望有某种UI来显示我正在处理的任何数据,并通过前面提到的@MessageMapping端点对这些数据进行任何UI更新。问题是我不知道如何使用rsocket-java或rsocket-kotlin库将完整的Java/Kotlin对象(作为JSON)发送到我的端点。由于我必须同时发送数据和元数据,并且元数据被编码为ByteBuf,因此我必须将JSON编码为ByteBuf,但它到达端点时就完全混乱了,并且无法反序列化。
我也尝试过发送原始字符串值,它也到达了所有混乱的端点(一堆非UTF字符)。我已经为数据mime类型尝试过APPLICATION_JSON和TEXT_PLAIN,但它们都不起作用。
此外,我猜我做错的任何事情都与Java/Kotlin库没有严格的关系,但可以应用于任何其他现有的RSocket库(Go、Rust、JS等)。
发布于 2020-12-05 23:46:06
如果您使用的是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()
}发布于 2020-11-26 01:39:36
我想我已经弄明白了。
我已经抓取了二进制编码的元数据,并借用了我在互联网上找到的JavaScript中的RSocket,它起作用了:)
因此,解决方案是使用路由元数据mime类型(我使用的是复合类型,因为我找到的示例就是使用它),然后可以像这样创建有效负载:
val json = "{}"
val route = "myawesomeroute"
DefaultPayload.create(<json>, "${route.length.toChar()}$route")https://stackoverflow.com/questions/65009567
复制相似问题