内容简介: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.Streams
与 Reactive 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 .
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 基于 Laravel、Lumen 框架集成百度翻译、有道翻译、Google 翻译扩展包
- 腾讯发布人工智能辅助翻译 致敬人工翻译
- golang调用baidu翻译api实现自动翻译
- 监管机器翻译质量?且看阿里如何搭建翻译质量评估模型
- 机器翻译新突破:谷歌实现完全基于attention的翻译架构
- PendingIntent 是个啥?官方文档描述的很到位。我给翻译翻译
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
ACM国际大学生程序设计竞赛题解
赵端阳//袁鹤 / 电子工业 / 2010-7 / 39.00元
随着各大专院校参加ACM/ICPC热情的高涨,迫切需要有关介绍ACM国际大学生程序设计竞赛题解的书籍。《ACM国际大学生程序设计竞赛题解(2)》根据浙江大学在线题库的部分题目,经过分类、筛选、汇编,并进行了解答(个别特别简单或者特别复杂的题目未选择),比较详细地分析和深入浅出地讲解了解题的方法和用到的算法。题目的类型包括基础编程、模拟、字符串处理、搜索、动态规划、回溯、图论、几何和数学题。 ......一起来看看 《ACM国际大学生程序设计竞赛题解》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
HEX CMYK 转换工具
HEX CMYK 互转工具