我正在查看https://github.com/playframework/Play20/tree/master/samples/scala/websocket-chat上的示例
要制作 websocket 控制器,您可以编写如下内容:
def chat(username: String) = WebSocket.async[JsValue] { request =>
ChatRoom.join(username)
}
Chatroom.join 返回一个scala.concurrent.Future[(Iteratee[JsValue,_],Enumerator[JsValue])]。但是 Play 中使用的迭代器和枚举器在哪里!框架?WebSocket类(WebSocket.scala)似乎忽略了输入:
case class WebSocket[A](f: RequestHeader => (Enumerator[A], Iteratee[A, Unit]) => Unit) (implicit val frameFormatter: WebSocket.FrameFormatter[A]) extends Handler {
type FRAMES_TYPE = A
/**
* Returns itself, for better support in the routes file.
*
* @return itself
*/
def apply() = this
}
怎么玩!在 iteratee 消耗输入时管理不断变化的状态?