Как трансляция веб-сокета может быть реализована с помощью 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)
)
}