Kotlin 如何使用http4k实现websocket广播?
我正在用构建一个小的websocket应用程序,看起来没有关于如何使用它实现消息广播的文档(即,对消息做出反应,将消息发送到除发送消息的客户端之外的所有客户端)。有可能吗?如果问题是“http4k是否附带整个分布式消息传递平台”,那么答案是否定的:)。但是,如果您只想有一个消息传递节点来跟踪内存中的所有消息和连接的WebSocket,那么这是非常简单的 此代码改编自在30行Kotlin中实现聊天服务器的:Kotlin 如何使用http4k实现websocket广播?,kotlin,websocket,broadcast,http4k,Kotlin,Websocket,Broadcast,Http4k,我正在用构建一个小的websocket应用程序,看起来没有关于如何使用它实现消息广播的文档(即,对消息做出反应,将消息发送到除发送消息的客户端之外的所有客户端)。有可能吗?如果问题是“http4k是否附带整个分布式消息传递平台”,那么答案是否定的:)。但是,如果您只想有一个消息传递节点来跟踪内存中的所有消息和连接的WebSocket,那么这是非常简单的 此代码改编自在30行Kotlin中实现聊天服务器的: fun IrcApp(): PolyHandler { val userCount
fun IrcApp(): PolyHandler {
val userCounter = AtomicInteger()
val participants = ConcurrentHashMap<String, Websocket>()
fun newConnection(ws: Websocket) {
val id = "user${userCounter.incrementAndGet()}"
participants += id to ws
ws.onMessage { new ->
participants.values
.filterNot { it == ws }
.forEach { it.send(WsMessage("$id: ${new.bodyString()}")) }
}
ws.onClose {
participants -= id
}
}
return PolyHandler(
static(ResourceLoader.Classpath()),
websockets("/ws" bind ::newConnection)
)
}
fun IrcApp():PolyHandler{
val userCounter=AtomicInteger()
val参与者=ConcurrentHashMap()
趣味新连接(ws:Websocket){
val id=“user${userCounter.incrementAndGet()}”
参与者+=id到ws
ws.onMessage{new->
参与者的价值观
.filterNot{it==ws}
.forEach{it.send(WsMessage($id:${new.bodyString()))}
}
ws.onClose{
参与者-=id
}
}
返回多处理器(
静态(ResourceLoader.Classpath()),
WebSocket(“/ws”bind::newConnection)
)
}