Как трансляция веб-сокета может быть реализована с помощью http4k?

Я создаю небольшое приложение websocket с http4k websocket и похоже, что нет документации о том, как реализовать трансляцию сообщений с его помощью (то есть реагировать на сообщение, отправляющее его всем клиентам, кроме того, которое отправило сообщение). Является ли это возможным?

1 ответ

Если вопрос "поставляется ли http4k со всей платформой распределенного обмена сообщениями", то ответ - нет:) . Однако, если вы просто хотите иметь единый узел обмена сообщениями, который отслеживает все сообщения и подключенные веб-сокеты в памяти, это довольно просто сделать.

Этот код взят из демонстрационного проекта 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)
    )
}

Другие вопросы по тегам