Comet是指基于 HTTP 长连接的“服务器推”技术,是一种不需要客户端主动请求,服务端可以主动给客户端推送消息的技术。

1.使用chunked response来实现Comet

chunked responses最主要的作用是创建Comet sockets。

一个Comet socket 只包含<script>元素的是chunkedtest/html响应。对于每一个chunk,我们写入一个包含JS的

2.导入comet

import akka.stream.Materializer
import akka.stream.scaladsl.Source
import play.api.http.ContentTypes
import play.api.libs.Comet
import play.api.libs.json._
import play.api.mvc._

除此之外也需要一个实例,最好是通过DI来注入一个akka.stream.Materializer

3.通过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)
}

4.通过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)
}

5.将Comet与iframe结合使用

Comet helper需要特别使用一种名为forever-iframe的技术,如下html页面所示:

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

Note: 将如下配置添加到你的application.conf中,也要确保在routes中配置了正确的路由能够找到上面的action

play.filters.headers {
frameOptions = "SAMEORIGIN"
contentSecurityPolicy = "connect-src 'self'"
}

有关Comet的示例,请参阅Play Streaming示例

6.Dubug Comet

最简单的方式是使用log()操作来展示将数据映射到流中所出现的所有操作。

PLAY2.6-SCALA(八) comet的更多相关文章

  1. Scala(八)【面向对象总结】

    面向对象总结 面向对象 1.scala包 1.声明包 1.在文件第一行通过package 包名 2.package 包名{ .... } 第二种方法,包名只能在target目录才能看到 2.导入包 1 ...

  2. play1.x vs play2.x 对比(转)

    个人看到对比play1.x和play2.x比较的文章中,写的最深入,最清晰的一个.转自:http://freewind.me/blog/20120728/965.html 为了方便群中的Play初学者 ...

  3. Play1+angularjs+bootstrap ++ (idea + livereload)

    我的web开发最强组合:Play1+angularjs+bootstrap ++ (idea + livereload) 时间 2012-12-26 20:57:26  Freewind.me原文   ...

  4. 给Java开发人员的Play Framework(2.4)介绍 Part1:Play的优缺点以及适用场景

    1. 关于这篇系列 这篇系列不是Play框架的Hello World,由于这样的文章网上已经有非常多. 这篇系列会首先结合实际代码介绍Play的特点以及适用场景.然后会有几篇文章介绍Play与Spri ...

  5. play框架之简介

    Play Framework是一个开源的Web框架,背后商业公司是Typesafe.要介绍Play之前,首先理清Play的两个不同的分支. Play 1.x 使用Java开发,最新版本是1.3.1,只 ...

  6. Spark练习之Transformation操作开发

    Spark练习之Transformation操作开发 一.map:将集合中的每个元素乘以2 1.1 Java 1.2 Scala 二.filter:过滤出集合中的偶数 2.1 Java 2.2 Sca ...

  7. Scala学习十八——高级类型

    一.本章要点 单例类型可用于方法串接和带对象参数的方法 类型投影对所有外部类的对象都包含了其他内部类的实例 类型别名给类型指定一个短小的名称 结构类型等效于”鸭子类型“ 存在类型为泛型的通配参数提供了 ...

  8. Scala学习八——继承

    一.本章要点 extends,final关键字和Java一样 重写方法时必须使用override 只有主构造器可以调用超类的构造器 可以重写字段 二.扩展类 Scala扩展类和Java一样(使用ext ...

  9. Scala入门系列(八):面向对象之trait

    基础知识 1 将trait作为接口使用 此时Trait就与Java中的接口非常类似,不过注意,在Scala中无论继承还是trait,统一都是extends关键字. Scala跟Java 8前一样不支持 ...

随机推荐

  1. naturalWidth、naturalHeight来获取图片的真实宽高

    一般在图片放大缩小,或动态插入图片时使用 function imagea(img){ var w = img.naturalWidth; var h = img.naturalHeight; } 注: ...

  2. MySQL数据库 字段操作 多表关系(更新中...)

    外键 (foreign key) ## 外键 ```mysql # 作者(author):id,name,sex,age,mobile, detail_id # 作者详情(author_detail) ...

  3. 关于html 制作table的一个注意点

    数据分析,一般都需要显示数据,就需要使用html做复杂的表格.复杂表格一般是对td的rowspan .colspan属性值. 在html中<td> 标签定义 HTML 表格中的标准单元格. ...

  4. mysql导出数据库某些表的数据

    # 导出数据,一般从从库导出,减少主库的压力.mysqldump -hhostname -P3306 --single-transaction --master-data= database_name ...

  5. NPM:如何配置maven npm私服

    https://help.sonatype.com/repomanager3/quick-start-guide-proxying-maven-and-npm#QuickStartGuide-Prox ...

  6. canvas扇形进度圈动态加载

    效果图如下:动态加载的 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  7. UOJ#422. 【集训队作业2018】小Z的礼物

    #422. [集训队作业2018]小Z的礼物 min-max容斥 转化为每个集合最早被染色的期望时间 如果有x个选择可以染色,那么期望时间就是((n-1)*m+(m-1)*n))/x 但是x会变,中途 ...

  8. Weekly 10 小结

    A题 模拟 T = int(input()) while T: T -= 1 s = raw_input() n = len(s) res, pre = 0, 0 for i in xrange(1, ...

  9. python禁止函数修改列表的实现方法

    python禁止函数修改列表的实现方法 有时候,需要禁止函数修改列表.例如要对裂变进行修改操作,也要保留原来的未打印的设计列表,以供备案.为解决这个问题,可向函数传递列表的副本而不是原件:这样函数所做 ...

  10. mysql数据库外键、主键详解

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 比如  学生表(学号,姓名,性别,班级) 其中每个学生的学 ...