0

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

4

1 回答 1

1

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

这段代码改编自一个http4k 演示项目,该项目在 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)
    )
}

于 2019-05-01T07:50:00.550 回答