首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ktor -在接收到websocket通信之前保持POST活动

Ktor -在接收到websocket通信之前保持POST活动
EN

Stack Overflow用户
提问于 2022-04-21 10:23:49
回答 1查看 210关注 0票数 1

我正在用Kotlin和Ktor构建一个API,它应该能够接收正常的POST请求。

接收到它后,他应该保持它的活力,并使用websocket与其他系统建立一系列异步通信。

只有在这些来文结束时,它才能收到某些资料,才能对员额要求作出答复。

不用说,这一要求必须保持不变。

我不知道怎样才能做到这一点。

我已经研究过使用协同和线程,但我的经验使我无法理解什么是最好的解决方案。

EN

回答 1

Stack Overflow用户

发布于 2022-04-21 13:37:18

默认情况下,协同线中的顺序代码是同步执行的,因此您可以将用于通信的代码通过Websockets放入路由的处理程序中,最后发送响应。下面是一个示例:

代码语言:javascript
运行
复制
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()
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71952849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档