我尝试搜索api文档以及示例,但是没有任何示例演示如何发送ping和接收ping。唯一的例子是如何连接到websocket并发送文本here。 我还看到了服务器端的聊天示例here,我也仔细地遵循了该示例(即在WebSocket安装的服务器端配置中设置ping间隔)。
我开始双方都在听乒乓球,但是双方都没有收到任何ping消息。
并且您无法看到here,因此无法为ping配置客户端。
我对如何发送ping感到很困惑。
这是我的服务器端:
install(WebSockets)
{
pingPeriod = Duration.ofSeconds(20)
}
routing {
webSocket("/ws") {
for (frame in incoming)
{
when(frame)
{
is Frame.Pong ->
{
println("ping recieved")
}
is Frame.Ping ->
{
// just temporary block
println("ping recieved")
}
is Frame.Text ->
{
println(frame.readText())
}
}
}
}
}
这是我的客户端:
val client = HttpClient {
install(WebSockets)
}
client.ws(
method = HttpMethod.Get,
host = "127.0.0.1",
port = 80,
path = "/ws"
) {
// pinger(outgoing, 20_000, 15_000)
send(Frame.Text("Hello World!"))
for (frame in incoming)
{
when (frame)
{
is Frame.Pong ->
{
println("ping received")
}
}
}
}
我还为此here pinger
和ponger
找到了一些功能,但现在它说了它的api部分,并自动从WebsocketSession的启动开始,并且我还尝试将pinger放入客户端,但无论如何都不会向服务器发送ping。
以上代码的结果只是Hello world
从客户端发送而在服务器控制台中打印出来,但没有ping收到消息。
答案 0 :(得分:1)
我在让OkHttp使用ping / pong时遇到了麻烦,因此我提出了此问题https://github.com/ktorio/ktor/issues/1803,其中一位开发人员回答说:“我唯一推荐的方法是尝试CIO。是否支持手动Ping? /使用RawWebSockets处理Pong。”
我自己还没有尝试过,但是您应该查看https://github.com/ktorio/ktor/blob/master/ktor-features/ktor-websockets/jvm/test/io/ktor/tests/websocket/RawWebSocketTest.kt