首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用http4k实现websocket广播?

如何用http4k实现websocket广播?
EN

Stack Overflow用户
提问于 2019-04-30 16:45:38
回答 1查看 226关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2019-05-01 07:50:00

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

此代码来自于一个http4k演示项目,它实现了30行Kotlin中的聊天服务器:

代码语言:javascript
复制
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)
    )
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55925439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档