This commit is contained in:
SOR
2026-10-09 19:00:39 +08:00
commit 2c6198aa1e
16 changed files with 567 additions and 0 deletions
+27
View File
@@ -0,0 +1,27 @@
package io.github.sor2171
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
import java.time.Duration
fun Application.configureRouting() {
routing {
get("/") {
call.respondText("Hello, World!")
}
webSocket("/ws") { // websocketSession
for (frame in incoming) {
if (frame is Frame.Text) {
val text = frame.readText()
outgoing.send(Frame.Text("YOU SAID: $text"))
if (text.equals("bye", ignoreCase = true)) {
close(CloseReason(CloseReason.Codes.NORMAL, "Client said BYE"))
}
}
}
}
}
}
+16
View File
@@ -0,0 +1,16 @@
package io.github.sor2171
import io.ktor.server.application.*
import io.ktor.server.response.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
import kotlin.time.Duration.Companion.seconds
fun Application.configureWebsockets() {
install(WebSockets) {
pingPeriod = 15.seconds
timeout = 15.seconds
maxFrameSize = Long.MAX_VALUE
masking = false
}
}
+5
View File
@@ -0,0 +1,5 @@
package io.github.sor2171
fun main(args: Array<String>) {
io.ktor.server.cio.EngineMain.main(args)
}
+7
View File
@@ -0,0 +1,7 @@
ktor:
deployment:
port: 8080
application:
modules:
- io.github.sor2171.WebsocketsKt.configureWebsockets
- io.github.sor2171.RoutingKt.configureRouting
+12
View File
@@ -0,0 +1,12 @@
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="io.netty" level="INFO"/>
</configuration>
+18
View File
@@ -0,0 +1,18 @@
package io.github.sor2171
import io.ktor.client.request.get
import io.ktor.http.HttpStatusCode
import io.ktor.server.testing.testApplication
import kotlin.test.*
class ServerTest {
@Test
fun `test root endpoint`() = testApplication {
// loads default configuration
configure()
// verify server root returns 200
assertEquals(HttpStatusCode.OK, client.get("/").status)
}
}