【发布时间】:2020-02-13 22:27:36
【问题描述】:
我尝试在 api 文档和示例中进行搜索,但没有任何示例演示如何发送 ping 和接收 ping。唯一的例子是如何连接到 websocket 并发送文本here。 我还看到了服务器端的聊天示例here,我也仔细遵循了这一点(即在 WebSocket 安装的服务器端配置中设置 ping 间隔)。
我开始监听双方是否有乒乓,但没有一方收到任何 ping 消息。
如您所见here,没有配置客户端进行 ping 的选项。
我对如何发送 ping 感到非常困惑。
这是我的服务器端:
embeddedServer(
CIO,
80
) {
install(io.ktor.websocket.WebSockets) {
pingPeriod = Duration.ofSeconds(20)
}
routing {
webSocket("/ws") {
for (frame in incoming) {
when (frame) {
is Frame.Pong -> {
println("ping's response recieved")
}
is Frame.Ping -> {
// just temporary block
println("ping recieved")
}
is Frame.Text -> {
println(frame.readText())
}
}
}
}
}
}.apply { start() }
这是我的客户端:
val client = HttpClient(CIO) {
install(WebSockets)
}
client.ws(
method = HttpMethod.Get,
host = "127.0.0.1",
port = 80,
path = "/ws"
) {
send(Frame.Text("Hello World!"))
for (frame in incoming) {
when (frame) {
is Frame.Pong -> {
println("ping's response received")
}
is Frame.Ping -> {
// just temporary block
println("ping recieved from server")
}
is Frame.Text -> {
println(frame.readText())
}
}
}
}
结果:
Hello World!
即websocket已连接,文本可以传输,但遗憾的是不能使用ping/pong功能。
我还为 here pinger 和 ponger 找到了一些功能,但现在它说它是 api 的一部分,并随着 WebsocketSession 的启动而自动启动,我还尝试将 pinger 放在客户端但那没有t 发送 ping 到服务器。
上述代码的结果只是 Hello world 打印在服务器控制台中,从客户端发送,但没有 ping 接收到消息。
【问题讨论】:
标签: kotlin websocket ping kotlin-coroutines ktor