scala - Play Framework Websocket 服务器不处理来自 netty 客户端的 Ping 帧

标签 scala playframework websocket netty

处理Websockets,我拿了netty's client和我使用 Scala (2.10.2) 用 Play Framework (2.2.1) 构建的服务器(代码粘贴在下面)。 服务器不对客户端的 Ping 消息使用react。 既不让 Iteratee 注意到任何传入的 Ping 消息,框架本身也不响应 Ping 消息。

但是,我的应用程序处理传入的二进制帧。这对我来说看起来很奇怪,因为 in Netty's code , 二进制帧与 Ping 帧非常相似。我知道的唯一区别是操作码,即 Ping 为 0x9,Binay 为 0x2。

任何人都可以解释这种行为并提示我如何处理 Play Framework 中的 Websocket Ping/Pong 帧?

def connect = WebSocket.using[Array[Byte]] { request =>
   // connection attempts are also indicated if client sends 'PingWebSocketFrame'
   Logger.info("Someone just connected!?")

   val (out, channel) = Concurrent.broadcast[Array[Byte]]

   // Messages of netty's type 'PingWebSocketFrame' never enter here
   val in = Iteratee.foreach[Array[Byte]] { msg =>
      // the following line is printed if netty's 'BinaryWebSocketFrame' was sent BUT
      //                         never if netty's 'PingWebSocketFrame'   was sent, why?
      println("Some Binary data arrived, being of length " + msg.length + " [bytes]")
   }
(in, out)
}

最佳答案

Playframework 不支持 pingframe。它只是忽略了它。现在已在 master 中修复

https://github.com/playframework/playframework/pull/2130

关于scala - Play Framework Websocket 服务器不处理来自 netty 客户端的 Ping 帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659446/

相关文章:

Scala 隐式类和继承

playframework - Play 框架将 HTTP 重定向到 https

javascript - 对于 WebSocket,onclose 总是在 onerror 之后调用

java - 如何编写 Netty 客户端连接到 Signalr hub 的代码?

Spring Webflux Async PostgreSQL Publisher 在第一个结果后停止

regex - 检查正则表达式模式匹配是否失败

Scalaz 翻转嵌套的存在/验证 mono-whatevers-nads 围绕 pre-applicative-building

intellij-idea - 配置 IntelliJ 以便运行测试需要特定的配置文件?

java - JPA:PersistenceException,无法更新

scala - 允许方法签名中存在子类型的特征