【问题标题】:Play Framework 2.2.0 [scala] - WebSocket.async vs WebSocket.using[T]Play Framework 2.2.0 [scala] - WebSocket.async 与 WebSocket.using[T]
【发布时间】:2013-10-19 19:09:40
【问题描述】:
似乎找不到任何关于此的文档,但看到一些示例在操作中使用 WebSocket.async 作为其返回类型,而其他示例则使用 WebSocket.using[String]。
是否有关于何时使用哪个的文档?我了解 Websocket.using[String] 表示进出此操作的消息类型为字符串类型。那么使用 WebSocket.async 到底有什么区别?主要关心的是何时使用哪个以及为什么使用。
【问题讨论】:
标签:
scala
playframework
websocket
playframework-2.2
【解决方案1】:
看看他们各自的签名:
def using[A](f: RequestHeader => (Iteratee[A, _], Enumerator[A]))(implicit frameFormatter: FrameFormatter[A]): WebSocket[A]
def async[A](f: RequestHeader => Future[(Iteratee[A, _], Enumerator[A])])(implicit frameFormatter: FrameFormatter[A]): WebSocket[A]
可能有点过分,让我们删除返回类型和隐式参数列表,因为它们是相同的:
def using[A](f: RequestHeader => (Iteratee[A, _], Enumerator[A]))
def async[A](f: RequestHeader => Future[(Iteratee[A, _], Enumerator[A])])
现在更容易发现差异。 async 接受的回调返回 Future,而 using 则不能。 async 在您使用异步库时很有用,例如Akka,向某个actor发送消息会产生Future。 using 应该与同步库一起使用。我希望这是有道理的。