Как реализовать трансляцию через веб-сокет с помощью http4k? - PullRequest
0 голосов
/ 30 апреля 2019

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

1 Ответ

1 голос
/ 01 мая 2019

Если вопрос «поставляется ли 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)
    )
}

...