scala – 创建一个基于时间的分块枚举
发布时间:2020-12-16 09:09:58 所属栏目:安全 来源:网络整理
导读:我想创建一个Play 2枚举,它接收值并将它们输出,每隔x秒/毫秒就拼凑在一起.这样,在具有大量用户输入的多用户websocket环境中,可以限制每秒接收的帧数. 我知道可以将一组数量的项目组合在一起,如下所示: val chunker = Enumeratee.grouped( Traversable.take[
我想创建一个Play 2枚举,它接收值并将它们输出,每隔x秒/毫秒就拼凑在一起.这样,在具有大量用户输入的多用户websocket环境中,可以限制每秒接收的帧数.
我知道可以将一组数量的项目组合在一起,如下所示: val chunker = Enumeratee.grouped( Traversable.take[Array[Double]](5000) &>> Iteratee.consume() ) 基于时间而不是基于项目的数量,是否有内置的方法? 我正在考虑用定期的Akka工作这样做,但是一见钟情似乎效率不高,我不知道是否会出现简洁问题. 解决方法
这样怎么样?我希望这对你有帮助.
package controllers import play.api._ import play.api.Play.current import play.api.mvc._ import play.api.libs.iteratee._ import play.api.libs.concurrent.Akka import play.api.libs.concurrent.Promise object Application extends Controller { def index = Action { val queue = new scala.collection.mutable.Queue[String] Akka.future { while( true ){ Logger.info("hogehogehoge") queue += System.currentTimeMillis.toString Thread.sleep(100) } } val timeStream = Enumerator.fromCallback { () => Promise.timeout(Some(queue),200) } Ok.stream(timeStream.through(Enumeratee.map[scala.collection.mutable.Queue[String]]({ queue => var str = "" while(queue.nonEmpty){ str += queue.dequeue + "," } str }))) } } 而且这个文件对你也是有帮助的. UPDATE package controllers import play.api._ import play.api.Play.current import play.api.mvc._ import play.api.libs.iteratee._ import play.api.libs.concurrent.Akka import play.api.libs.concurrent.Promise import scala.concurrent._ import ExecutionContext.Implicits.global object Application extends Controller { def index = Action { val queue = new scala.collection.mutable.Queue[String] Akka.future { while( true ){ Logger.info("hogehogehoge") queue += System.currentTimeMillis.toString Thread.sleep(100) } } val timeStream = Enumerator.repeatM{ Promise.timeout(queue," } str }))) } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |