Scala: Получение Сервера-Отправлено-События
настройки:
проект, над которым я работаю, имеет сервер pub/sub с интерфейсом HTTP. Подписка работает, принимая сервер-отправленные-события.
curl -X GET server:port/topics/news
который будет нажат всякий раз, когда сообщение публикуется в данной теме URL
curl -X PUT server:port/topics/news -d "Politician Lies!"
:
у меня есть проект scala, который должен подписаться на этот сервер pub/sub. Пьеса! framework может справиться с этим, используя PlayWS с Enumeratee + Iteratee. К сожалению, библиотека PlayWS требует, чтобы играть! Приложение находится в области, и я не использую Play. Есть ли библиотека (с минимальными зависимостями), которую я могу использовать, которая позволяет мне принимать серверные отправленные события? Для начала мне понадобится хотя бы один рабочий пример.
у меня есть предпочтение библиотек scala, но я готов принять решение Java, если придется.
3 ответов
у вас есть несколько возможностей:
В Игре 2.3, библиотека WS теперь является отдельной библиотекой, так что должно помочь. RC2 является уже существующих
кроме того, вы можете зависеть от игры 2.x и используйте StaticApplication
вот так:
val application = new StaticApplication(new java.io.File("."))
это по существу загрузит приложение Play, и оттуда вы можете использовать WS
библиотека как обычно
Я принял ответ Мануэля Бернхардта, потому что он привел меня в правильном направлении, но я чувствую, что полный пример важен для любого другого с этой проблемой.
я обновил сборку.sbt-файл, включающий PlayWS 2.3 и библиотеку Iteratees.
libraryDependencies ++= Seq(
"com.typesafe.play" %% "play-ws" % "2.3.0",
"com.typesafe.play" %% "play-iteratees" % "2.3.0"
)
WS singleton требует использования неявного приложения 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, которые реализуют клиент отправленных событий сервера, но проект Джерси имеет Java библиотека для сервера отправленных событий клиентов (как и серверы). API не кажется очень подробным и, похоже, его можно красиво завернуть в какой-то код, чтобы он более идиоматично вписывался в Scala.