Kotlin 如何在Ktor WebSocket上发送ping

Kotlin 如何在Ktor WebSocket上发送ping,kotlin,websocket,ping,kotlin-coroutines,ktor,Kotlin,Websocket,Ping,Kotlin Coroutines,Ktor,我尝试搜索api文档和示例,但没有任何示例演示如何发送ping和接收ping。唯一的例子是如何连接到websocket并发送文本。 我还看到了服务器端的聊天示例,并仔细地遵循了该示例(即在WebSocket安装的服务器端配置中设置ping间隔) 我开始听双方的乒乓球,但没有一方收到任何乒乓球信息 正如您所看到的,没有为ping配置客户端的选项 我对如何发送ping感到非常困惑 这是我的服务器端: embeddedServer( 首席信息官, 80 ) { 安装(io.ktor.websocket

我尝试搜索api文档和示例,但没有任何示例演示如何发送ping和接收ping。唯一的例子是如何连接到websocket并发送文本。 我还看到了服务器端的聊天示例,并仔细地遵循了该示例(即在WebSocket安装的服务器端配置中设置ping间隔)

我开始听双方的乒乓球,但没有一方收到任何乒乓球信息

正如您所看到的,没有为ping配置客户端的选项

我对如何发送ping感到非常困惑

这是我的服务器端:

embeddedServer(
首席信息官,
80
) {
安装(io.ktor.websocket.websocket){
pingPeriod=持续时间秒(20)
}
路由{
webSocket(“/ws”){
用于(传入中的帧){
何时(帧){
是Frame.Pong->{
println(“收到ping的回复”)
}
是Frame.Ping->{
//只是暂时的封锁
println(“收到ping”)
}
是Frame.Text->{
println(frame.readText())
}
}
}
}
}
}.apply{start()}
这是我的客户端:

val-client=HttpClient(CIO){
安装(WebSocket)
}
client.ws(
method=HttpMethod.Get,
host=“127.0.0.1”,
端口=80,
path=“/ws”
) {
发送(Frame.Text(“helloworld!”)
用于(传入中的帧){
何时(帧){
是Frame.Pong->{
println(“收到ping的回复”)
}
是Frame.Ping->{
//只是暂时的封锁
println(“从服务器接收到ping”)
}
是Frame.Text->{
println(frame.readText())
}
}
}
}
结果:

Hello World!
i、 e websocket已连接,文本可以传输,但遗憾的是无法使用乒乓功能

我还为这个
pinger
ponger
找到了一些函数,但现在它表示它是api的一部分,并自动启动WebsocketSession,我还尝试将pinger放在客户端,但这并没有将ping发送到服务器


上述代码的结果就是,
Hello world
在服务器控制台中打印为从客户端发送,但没有收到ping消息。

我在让OkHttp使用ping/pong时遇到问题,所以我提出了这个问题,其中一个开发人员回答“嗯,我唯一能向你推荐的就是试试首席信息官。Is不支持使用RawWebSocket进行手动乒乓处理。”


我自己还没有尝试过,但你应该检查一下

True,WebSocket不是完全可定制的,只有文本框是我们目前可以通过默认实现接收到的,我已经对这个问题发表了评论,让我们看看响应是什么。如果我们可以从默认实现继承一些函数来创建自定义实现。重新创建实现会很混乱,如果你有任何想法,请把它挂起来。