设置:
我正在处理的一个项目有一个带有 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/