Comet[翻译]
来源:互联网 发布:php跳转id代码 编辑:程序博客网 时间:2024/06/06 17:59
原文: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.Materializerimport akka.stream.scaladsl.Sourceimport play.api.http.ContentTypesimport play.api.inject.guice.GuiceApplicationBuilderimport play.api.libs.Cometimport play.api.libs.iteratee.Enumeratorimport play.api.libs.json._import play.api.libs.streams.Streamsimport play.api.mvc._
你也需要一个从你的 DI system中获取akka.stream.Materializer
的最好的实现者。
String流使用Comet
像下面这样通过Flow推送字符串信息:
def cometString = Action {implicit val m = materializerdef 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 = materializerdef 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 = materializerval 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.
- Comet[翻译]
- Comet
- comet
- comet
- Comet
- Comet
- Comet
- comet
- comet
- comet
- Comet
- Comet
- comet
- Comet
- Comet
- comet.exe
- Comet简介
- comet收集
- LeetCode Weekly Contest 30解题思路
- SpringBoot非官方教程 | 第十八篇: 定时任务(Scheduling Tasks)
- 汇编bne的问题 汇编中的标号1: 以及bne 1b解释
- 【pygame入门】-- 字体
- 米磊博士:下一个风口就是硬科技,抓住机遇,中国能重返世界之巅
- Comet[翻译]
- 我的java学习路之选择和循环
- 好用的chrome插件:鼠标手势、阅读视图、onetab
- linux CLK时钟驱动
- 位图 BitMap
- spark报错---安装系列八
- 包含min函数的栈
- 算法导论 练习题 11.1-3
- MIME参考列表