Я попытался выполнить поиск в документации api, а также в примерах, но не было ни одного примера, демонстрирующего, как отправлять пинги и получать пинги. Единственным примером было то, как подключиться к websocket и отправить текст сюда. Я также видел образец чата здесь на стороне сервера, и я тоже внимательно следил за ним (т.е. установить интервал пинга в конфигурации на стороне сервера установки WebSocket).
Я начинаю слушать понги с обеих сторон, но ни одна из сторон не получала никаких сообщений о пинге.
И нет возможности настроить клиентскую сторону для пингов, как вы можете увидеть здесь < / а>.
Я так запутался в том, как отправлять пинги.
Это моя серверная часть:
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!
то есть веб-сокет подключен, текст может передаваться, но, к сожалению, не может использовать функцию пинг / понг.
Я также нашел несколько функций для этого здесь pinger
и ponger
, но теперь он говорит о своей части api и автоматически запускается с инициированием WebsocketSession, и я также попытался установить пингер на стороне клиента, но это не отправило пинг на сервер вообще.
Результатом приведенного выше кода является просто Hello world
печатается в консоли сервера как отправленное со стороны клиента, но не полученные сообщения ping.