设置向上:
我正在处理的项目有一个带有HTTP接口的pub / sub服务器。订阅通过接受服务器发送事件来工作。
curl -X GET server:port/topics/news
每当邮件发布到给定主题URL 时,都会推送
curl -X PUT server:port/topics/news -d "Politician Lies!"
问题:
我有一个scala项目需要订阅这个pub / sub服务器。表演!框架能够通过使用带有Enumeratee + Iteratee的PlayWS来处理这个问题。不幸的是,PlayWS库需要Play!应用程序在范围内,我不使用Play。是否有一个库(具有最小的依赖性)我可以使用它允许我接受服务器发送事件?我需要至少一个工作示例才能开始。
我偏爱scala库,但如果必须,我愿意接受Java解决方案。
答案 0 :(得分:4)
我接受了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!
答案 1 :(得分:3)
您有几种可能性:
在Play 2.3中,the WS library is now a separate library,这应该有所帮助。 RC2已经可用
或者,您可以依赖Play 2.x并使用StaticApplication
,如下所示:
val application = new StaticApplication(new java.io.File("."))
这基本上是引导Play应用程序,从那里你可以像往常一样使用WS
库
答案 2 :(得分:2)
我不知道实现Server Sent Events客户端的其他Scala库,但Jersey项目有Java library for Server Sent Events clients(以及服务器)。 API看起来并不是非常冗长,看起来它可以很好地包装在一些代码中,以便更加适合Scala。