Play Framework, Scala -只有当有新数据可用时才发送websocket消息给客户端



在我的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(""))

相关内容

  • 没有找到相关文章

最新更新