【发布时间】:2020-04-02 13:40:49
【问题描述】:
我正在尝试创建一个 Kotlin 服务,该服务能够将数据从 Kafka 传递到(特定的)WebSocket 连接。 例如,如果来自用户的数据在 Kafka 上经过,程序会接收到它,如果当前连接的是同一用户,我想将其传递给正确的 WebSocket 连接。
我的基础是:
@KafkaListener()
@Controller
@Secured(SecurityRule.IS_ANONYMOUS)
@ServerWebSocket("/ws/{id}")
class WebSocket() {
@OnOpen
fun onOpen(session: WebSocketSession, id: String): Publisher<String> {
return session.send("connection opened")
}
}
但是,如果我在同一个班级中收到一条 Kafka 消息,其中包含我正在寻找的用户 ID,我如何将其传递给正确的 WebSocket 连接?
我想如果我使用网址中的"/ws/{id}",我可以轻松地将其发送到正确的 id,但我不知道如何。
我知道向连接发送数据的唯一方法是从 websocket 注释函数内部,如 OnOpen 和 OnMessage 等。 此外,我发现 Micronaut WebSocketBroadcaster 很有用,但当然只用于广播。
我要弄清楚的其他事情是在哪里确保连接的 id 也是用户的实际 id 而不是其他人的,我应该在 @Secured 注释中实现它吗?
【问题讨论】:
标签: java kotlin websocket micronaut