Scala:接收服务器发送的事件

标签 scala http playframework-2.0 server-sent-events spray

设置:

我正在处理的一个项目有一个带有 HTTP 接口(interface)的发布/订阅服务器。订阅通过接受服务器发送的事件来工作。

curl -X GET server:port/topics/news

每当消息发布到给定主题 URL 时将被推送

curl -X PUT server:port/topics/news -d "Politician Lies!"

问题:

我有一个 scala 项目需要订阅这个发布/订阅服务器。表演!框架能够通过使用带有 Enumeratee + Iteratee 的 PlayWS 来处理这个问题。不幸的是,PlayWS 库需要一个 Play!应用程序在范围内,我没有使用 Play。有没有我可以使用的库(具有最小的依赖性)允许我接受服务器发送的事件?我至少需要一个工作示例才能开始。

我更喜欢 scala 库,但如果必须的话,我愿意接受 Java 解决方案。

最佳答案

我接受了 Manuel Bernhardt 的回答,因为它引导我朝着正确的方向前进,但我觉得一个完整的例子对于遇到这个问题的其他人来说很重要。

我更新了我的 build.sbt 文件以包含 PlayWS 2.3 和 Iteratees 库。

libraryDependencies ++= Seq(
  "com.typesafe.play" %% "play-ws" % "2.3.0",
  "com.typesafe.play" %% "play-iteratees" % "2.3.0"
)

WS 单例需要使用一个隐式的 Play 应用程序(我没有或不想要的东西)所以我需要创建我自己的客户端

val builder = new (com.ning.http.client.AsyncHttpClientConfig.Builder)()
val client = new play.api.libs.ws.ning.NingWSClient(builder.build())

然后我创建我的 Iteratee 以便我可以处理我的服务器发送的事件。

def print = Iteratee.foreach { chunk: Array[Byte] => 
  println(new String(chunk))
}

最后订阅服务器

client.url("http://localhost:8080/topics/news").get(_ => print)

现在,当发送一个事件时

curl -X PUT server:port/topics/news -d "Politician Lies!"

我的 Scala 应用程序将打印接收到的事件

data: Politician Lies!

关于Scala:接收服务器发送的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23703099/

相关文章:

php - UDK Scaleform 4 AS3 跨域URLRequest 可能吗?

scala - Play2,斯卡拉 : Loading resources does not work in production mode

Scala Nil 等效于 Set

scala - Spark中ALS的实现

c# - HTTP 连接问题

http - 何时从 http 请求规范中使用 absoluteUri?

playframework - Play Framework 2 : Eclipse cant detect jBCrypt as project dependency

mongodb - 为什么我在重新编译后第一次访问数据库时会出现套接字超时?

scala - 重载具有按名称调用参数的函数和具有按值参数的函数

scala - apply() 的魔力在 "underscore shorthand"中写入时无法识别