как вручную отправлять кадры Pong в websockets с помощью akka

#scala #websocket #akka

#scala #websocket #akka

Вопрос:

У меня есть клиент websocket, написанный на scala-akka, который использует сервер websocket. Этот сервер отправляет a ping каждые 3 минуты и ожидает a pong . Сообщения о фреймах Pong также могут быть отправлены без запроса.

Тем не менее, akka поддерживает автоматическое поддержание активности, но только когда соединение простаивает. Соединение никогда не простаивает, но я хочу отправить кадры pong на сервер, иначе соединение будет отключено.

Я пытался передать такой источник

 val pong = Source.tick(0 minute, 1 minute, BinaryMessage.apply(ByteString.apply("0xA")))
//or like this
val pong = Source.tick(0 minute, 1 minute, TextMessage.apply("pong"))
  

но, похоже, они не работают, соединение прерывается через 3 минуты, точно так, как указано в документах.

 val flow = Flow.fromSinkAndSourceCoupledMat(printSink, pong)(Keep.both)
val (upgradeResponse, closed) = Http().singleWebSocketRequest(webSocketRequest, flow)
  

Часть документов, в которой упоминается это:

 The websocket server will send a ping frame every 3 minutes. If the websocket server does not receive a pong frame back from the connection within a 10 minute period, the connection will be disconnected. Unsolicited pong frames are allowed.
  

Есть предложения?

Комментарии:

1. Akka HTTP всегда автоматически отвечает на PING-фреймы с помощью PONG-фреймов. Приведенные вами биты документации касаются того, следует ли отправлять pings (или незапрошенные pong) в дополнение к тому, что, как вы говорите, может происходить только при бездействии соединения. Так что, может быть, здесь играет роль что-то еще?