我正在用Kotlin和Ktor构建一个API,它应该能够接收正常的POST请求。
接收到它后,他应该保持它的活力,并使用websocket与其他系统建立一系列异步通信。
只有在这些来文结束时,它才能收到某些资料,才能对员额要求作出答复。
不用说,这一要求必须保持不变。
我不知道怎样才能做到这一点。
我已经研究过使用协同和线程,但我的经验使我无法理解什么是最好的解决方案。
发布于 2022-04-21 13:37:18
默认情况下,协同线中的顺序代码是同步执行的,因此您可以将用于通信的代码通过Websockets放入路由的处理程序中,最后发送响应。下面是一个示例:
import io.ktor.client.*
import io.ktor.client.engine.okhttp.*
import io.ktor.client.plugins.websocket.*
import io.ktor.client.plugins.websocket.WebSockets
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import io.ktor.server.websocket.*
import io.ktor.websocket.*
fun main() {
val client = HttpClient(OkHttp) {
install(WebSockets)
}
embeddedServer(Netty, port = 12345) {
routing {
get("/") {
client.webSocket("ws://127.0.0.1:5050/ws") {
outgoing.send(Frame.Text("Hello"))
val frame = incoming.receive()
println((frame as Frame.Text).readText())
println("Websockets is done")
}
call.respondText { "Done" }
}
}
}.start(wait = false)
embeddedServer(Netty, port = 5050) {
install(io.ktor.server.websocket.WebSockets)
routing {
webSocket("/ws") {
outgoing.send(Frame.Text("Hello from server"))
}
}
}.start()
}
https://stackoverflow.com/questions/71952849
复制相似问题