Как отправить пинг со стороны клиента на сторону сервера на websockets ktor.io - PullRequest
0 голосов
/ 17 октября 2019

Я пытался искать в api docs, а также в примерах, но не было ни одного примера, демонстрирующего, как отправлять пинги и получать пинги. Единственный пример - как подключиться к веб-сокету и отправить текст здесь . Я также видел пример чата здесь на стороне сервера, и я также тщательно следил за этим (т. Е. Установил интервал проверки связи в конфигурации на стороне сервера при установке WebSocket).

Я начинаю слушать обе стороны на понги, нони одна из сторон не получала никаких сообщений пинга.

И нет никакой возможности настроить клиентскую сторону для пингов, как вы можете видеть здесь .

Я такЯ не совсем понимаю, как отправлять пинги.

Это моя сторона сервера:

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")
            }
        }
    }
}

Я также нашел некоторые функции для этого здесь pinger и ponger, но теперь он говорит свою часть API и автоматически запускается с инициированием WebsocketSession, и я также пытался положить Pingerна стороне клиента, но это не отправляло ping на сервер.

В результате вышеприведенного кода просто Hello world печатается в консоли сервера как отправленное со стороны клиента, но сообщения ping не принимаются.

...