Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 如何使用http4k实现websocket广播?_Kotlin_Websocket_Broadcast_Http4k - Fatal编程技术网

Kotlin 如何使用http4k实现websocket广播?

Kotlin 如何使用http4k实现websocket广播?,kotlin,websocket,broadcast,http4k,Kotlin,Websocket,Broadcast,Http4k,我正在用构建一个小的websocket应用程序,看起来没有关于如何使用它实现消息广播的文档(即,对消息做出反应,将消息发送到除发送消息的客户端之外的所有客户端)。有可能吗?如果问题是“http4k是否附带整个分布式消息传递平台”,那么答案是否定的:)。但是,如果您只想有一个消息传递节点来跟踪内存中的所有消息和连接的WebSocket,那么这是非常简单的 此代码改编自在30行Kotlin中实现聊天服务器的: fun IrcApp(): PolyHandler { val userCount

我正在用构建一个小的websocket应用程序,看起来没有关于如何使用它实现消息广播的文档(即,对消息做出反应,将消息发送到除发送消息的客户端之外的所有客户端)。有可能吗?

如果问题是“http4k是否附带整个分布式消息传递平台”,那么答案是否定的:)。但是,如果您只想有一个消息传递节点来跟踪内存中的所有消息和连接的WebSocket,那么这是非常简单的

此代码改编自在30行Kotlin中实现聊天服务器的:

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)
)
}