Comet[翻译]

栏目: Scala · 发布时间: 6年前

内容简介:Comet[翻译]

原文: Comet

使用Comet的块应答

块应答的一个常见的用法是创建 Comet 套接字。

Comet套接字是仅包含 <script> 元素的 text/html 应答块。对于每一个块,我们写一个 <script> 标签,这个标签包含了通过Web浏览器立即执行的 JavaScript 。这样我们就可以实时的把事件从服务器发送到Web浏览器:对每一个消息,把它封装进调用 JavaScript 回调函数的 <script> 标签,并把它写进块应答。

由于 Ok.chunked 利用 Akka Streams 获取 Flow[ByteString] ,因此我们可以发送Flow元素并转换它,如此每一个元素会被转义并封装到JavaScript方法中。Comet助手自动完成Comet套接字,根据浏览器的兼容性推送初始的空白缓存,并支持字符串和JSON消息。

Comet Imports

为了使用Comet 助手,导入下面的类:

import akka.stream.Materializer  
import akka.stream.scaladsl.Source  
import play.api.http.ContentTypes  
import play.api.inject.guice.GuiceApplicationBuilder  
import play.api.libs.Comet  
import play.api.libs.iteratee.Enumerator  
import play.api.libs.json._  
import play.api.libs.streams.Streams  
import play.api.mvc._

你也需要一个从你的 DI system 中获取 akka.stream.Materializer 的最好的实现者。

String流使用Comet

像下面这样通过Flow推送字符串信息:

def cometString = Action {  
implicit val m = materializer  
def stringSource: Source[String, _] = Source(List("kiki", "foo", "bar"))  
Ok.chunked(stringSource via Comet.string("parent.cometMessage")).as(ContentTypes.HTML)  
}

JSON流使用Comet

像下面这样通过Flow推送JSON信息:

def cometJson = Action {  
implicit val m = materializer  
def jsonSource: Source[JsValue, _] = Source(List(JsString("jsonString")))  
Ok.chunked(jsonSource via Comet.json("parent.cometMessage")).as(ContentTypes.HTML)  
}

Iframe使用Comet

Comet 助手通常应该和 forever-iframe 技术一起使用,与HTML页面一样:

<script type="text/javascript">  
var cometMessage = function(event) {  
console.log('Received event: ' + event)  
}
</script>

<iframe src="/comet"></iframe>

Comet助手的例子,见 Play 2.5 Clock Template.

调试Comet

调试有问题的Comet流的最简单的方式是使用log()操作显示通过流的映射数据所涉及的任何错误。

Comet遗留的Enumerator

先前存在的 Comet 功能通过 Enumeratee 使用 Comet.apply 仍然有效,但是它已经被废弃了,推荐使用基于 Akka Streams 流的版本。

如果你现有的代码在很大程度上依赖了 Enumerator, 你可以使用 play.api.libs.streams.StreamsReactive Streams 相互协作把 Enumerator 转换成流:

implicit val m = materializer  
val enum = Enumerator("one", "two", "three")  
val publisher = Streams.enumeratorToPublisher(enum)  
def stringSource: Source[String, _] = Source.fromPublisher(publisher)  
Ok.chunked(stringSource via Comet.string("parent.cometMessage")).as(ContentTypes.HTML)  
}

也可参考 Streams Migration Guide .


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学建模(原书第5版)

数学建模(原书第5版)

[美] Frank R. Giordano、[美] William P.Fox、[美] Steven B.Horton / 叶其孝、姜启源 / 机械工业出版社 / 2014-10-1 / 99.00元

《华章数学译丛:数学建模(原书第5版)》旨在指导学生初步掌握数学建模的思想和方法,共分两大部分:离散建模和连续建模,通过本书的学习,学生将有机会在创造性模型和经验模型的构建、模型分析以及模型研究方面进行实践,增强解决问题的能力。 《华章数学译丛:数学建模(原书第5版)》对于用到的数学知识力求深入浅出,涉及的应用领域相当广泛,适合作为高等院校相关专业的数学建模教材和参考书,也可作为参加国内外数......一起来看看 《数学建模(原书第5版)》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具