在我的play框架应用程序(play 2.4.1)中,我使用WebSocket向客户端发送连续的数据。目前,我的例程每10秒向客户端发送一条消息,而不管用户是否有新数据可用。
如果没有新的可用数据,例程将发送一个空字符串。合理地说,我只会在有新数据的情况下发送消息。如果没有新的数据可用,则不需要消息。
我如何在Scala中做到这一点?
def websocket() = WebSocket.using[String] {
request =>
// get session user
val user = request.session.get("user") match {
case Some(s) => s.toString
case _ => " "
}
Logger.info(s"[ap] websocket, client $user connected.")
val outEnumerator = Enumerator.repeatM[String](Promise.timeout({
// check for new trigger entry for the user
val resultString = Trigger.findByPersonnelNumber(user) match {
case None => ""
case _ => Trigger.delete(user)
val orders = Order.findByUser(user)
Json.stringify(Json.toJson(orders))
}
resultString
}, 10000))
(Iteratee.ignore[String], outEnumerator)
}
outtenumerator之类的。
如果resultString为空,则忽略[String]。所以我很想找到一个好的解决方案。
提前感谢!
直接解决您的问题是使用Enumeratee.filter
:
val outEnumerator = Enumerator.repeatM[String](...) &> Enumeratee.filter[String](s => !s.equals(""))