Tiago
09/01/2025, 2:06 PMChris Lee
09/01/2025, 2:47 PMTiago
09/01/2025, 3:28 PMTiago
09/01/2025, 3:31 PMChris Lee
09/01/2025, 3:33 PM// bundle netty native libraries for linux and osx, for x86_64 and aarch_64
setOf("x86_64", "aarch_64").forEach { arch ->
runtimeOnly(libs.netty.transportNativeEpoll) { artifact { classifier = "linux-${arch}" } }
runtimeOnly(libs.netty.transportNativeKqueue) { artifact { classifier = "osx-${arch}" } }
}
Perhaps check that the websocket connection/message handling isn’t doing something blocking? A common issue is to have something blocking on a Netty thread, starving Netty from processing IO.Tiago
09/01/2025, 3:35 PMChris Lee
09/01/2025, 3:38 PMgradle/libs.versions.toml
:
netty-transportNativeEpoll = { module = "io.netty:netty-transport-native-epoll" }
netty-transportNativeKqueue = { module = "io.netty:netty-transport-native-kqueue" }
It further assumes you’re using the Ktor BOM in your build script, something like:
// ----- Ktor
implementation(platform(ktor.bom))
implementation(ktor.server.core)
implementation(ktor.server.netty)
implementation(ktor.server.compression)
implementation(ktor.server.forwardedHeader)
implementation(ktor.network.tls.certificates)
implementation(ktor.server.metrics.micrometer)
implementation(ktor.server.contentNegotiation)
implementation(ktor.serialization.jackson)
// ----- end Ktor
Tiago
09/01/2025, 3:43 PMTiago
09/01/2025, 3:57 PMChris Lee
09/01/2025, 4:31 PM# reference: <https://docs.gradle.org/current/userguide/version_catalogs.html>
[versions]
[plugins]
[libraries]
# native dependencies
netty-transportNativeEpoll = { module = "io.netty:netty-transport-native-epoll" }
netty-transportNativeKqueue = { module = "io.netty:netty-transport-native-kqueue" }
Tiago
09/01/2025, 7:19 PMChris Lee
09/01/2025, 7:20 PMTiago
09/01/2025, 7:28 PMTiago
09/01/2025, 7:29 PMChris Lee
09/01/2025, 7:30 PMTiago
09/01/2025, 7:30 PMTiago
09/01/2025, 9:02 PMTiago
09/01/2025, 9:03 PMTiago
09/01/2025, 10:29 PMTiago
09/01/2025, 10:40 PMChris Lee
09/01/2025, 10:42 PMTiago
09/01/2025, 10:43 PMChris Lee
09/01/2025, 10:45 PMTiago
09/02/2025, 12:47 AMTiago
09/02/2025, 12:49 AMChris Lee
09/02/2025, 12:51 AMTiago
09/02/2025, 1:00 AMTiago
09/02/2025, 1:10 AMChris Lee
09/02/2025, 1:12 AMTiago
09/02/2025, 1:17 AMTiago
09/02/2025, 1:22 AMTiago
09/02/2025, 1:11 PMTiago
09/02/2025, 2:04 PMTiago
09/02/2025, 2:04 PMTiago
09/02/2025, 2:05 PMTiago
09/02/2025, 3:55 PMTiago
09/02/2025, 5:47 PMTiago
09/02/2025, 5:52 PM