Comments 12
-Dvertx.options.workerPoolSize=1
-Dvertx.options.eventLoopPoolSize=1
Диспатчер для 1.1 coroutines:
class VertxCoroutineDispatcher() : CoroutineDispatcher() {
val vertx: io.vertx.core.Context = Vertx.currentContext()
override fun isDispatchNeeded(context: CoroutineContext) = (vertx != Vertx.currentContext())
override fun dispatch(context: CoroutineContext, block: Runnable) {
vertx.runOnContext { block.run() }
}
}
Обёртка для suspend->vertx callback:
inline suspend fun vx(crossinline callback: (Handler<JAsyncResult>) -> Unit) = suspendCoroutine { c ->
callback(Handler {
if (it.succeeded()) {
c.resume(it.result())
} else {
c.resumeWithException(it.cause())
}
})
}
Она не будет работать на http-client, там другую надо
Это вопрос больше по самому фреймворку, учитывая, что Kotlin на ресурсы не влияет.
Мой деплоймент был небольшим (скажем, не больше 100 запросов в минуту), но он вполне комфортабельно умещался на "small" сервере AWS EC2.
Честно говоря, сам бенчмарки особо не проводил, но при изначальном выборе частично базировался на результатах на TechEmpower: там во всех категориях есть "vertx-web" (в некоторых даже варианты с разными базами данных) и на разном железе/облаке, так что полезно для примерного сравнения.
Из достоинств, которые стоит еще упомянуть — очень быстрая компиляция, особенно если включен Gradle Daemon.
В качестве продолжения статьи так же хотелось бы посоветовать показать работу с БД. Она в Vertx так же сделана на мой взгляд крайне удобно.
Спасибо за совет, возможно сделаю в будущем продолжение про БД драйверы.
Компиляция действительно очень быстрая и в большей части случаев даже не требуется запускать ее с нуля: в исходнике build.gradle примера есть "redeploy watcher", который пересобирает приложение при любых изменениях. Очень удобно, когда отлаживаешь что-то или новый маршрут пишешь.
Асинхронная альтернатива для Kotlin в лице Vert.x