PLAY2.6-SCALA(八) comet
2024-09-06 14:33:38
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()
操作来展示将数据映射到流中所出现的所有操作。
最新文章
- ng-disabled 不起作用的解决办法
- MVC中使用Entity Framework 基于方法的查询学习笔记 (一)
- 5.3---找最近的两个数(CC150)
- SpringMVC 通过post接收form参数或者json参数
- Android设备唯一性判断
- [转]基于AnyCAD的准双曲面齿轮建模
- ZOJ1648 Circuit Board(线段相交)
- OC基础11:基本的C语言特性2
- hadoop Yarn运行机制
- iOS开发之Block
- python基础——继承实现的原理
- Spring(3)——装配 Spring Bean 详解
- Some notes in Stanford CS106A(2)
- centos7/centos6修改系统默认语言
- vue.js中 v-show在刷新页面时,会闪一下,如何解决?
- sencha touch 侧边栏扩展(只隐藏不销毁)
- 一款由css3和jquery实现的响应式设计导航
- 经典SQL语句基础50题
- Excel VBA入门(六)过程和函数
- sharePoint查看与更改用户登录账号