2016-06-24 8 views
0

Я ищу асинхронную библиотеку разбора/воспроизведения HTTP, которую можно подключить к потоку байтов (т. Е. Не зависит от прямого доступа к сокету и не создает/не ожидает фактического сетевые соединения).Библиотека парсера/рендеринга HTTP для Java/Scala

В принципе, данный поток байтов я хочу иметь возможность анализировать HTTP-запрос от него, потенциально манипулировать чем-либо и преобразовывать его в байтовую строку. И для запросов, и для ответов. Идеально подходит для строгих и упорядоченных запросов.

Главный манипулятор Http proxy, который работает на потоках ввода, потоках java, реактивных потоках или чем-то подобном (клиентский сервер &).

что-то вроде этого:

stream of bytes <-> HttpLib <-> customCode <-> HttpLib <-> stream of bytes 

до сих пор я смотрел на

  • Akka Http: близко к тому, что мне нужно, но поведение ошибка закодирована
  • Appache Http компоненты: кажется, ориентированные на использование с гнездами, доступ к нижним уровням возможен, но он не похож на предполагаемое использование
  • другие спрей, netty не уверен, что они выработают какой-либо опыт се?

Любые предложения приветствуются!

Update

Что касается Akka HTTP: Я имею в виду поведение onUpstreamFailure, который обрабатывается непосредственно в serverLayer план. Я думаю, это самый эффективный/удобный дефолт, но как бы этапы потоков после того, как серверный слой реагирует на такие ошибки (опционально), распространяя эту ошибку, будет более гибким.

-> Bytes -> serverLayer -> customCode 
       | 
    <- (error response) 
+0

Akka HTTP также является первым, что придет к моему ум (http://doc.akka.io/docs/akka/2.4.7/scala/http/low-level-server-side-api.html#Request-Response_Cycle). Каким образом обработка ошибок слишком ограничительна для вашего сценария использования? – devkat

+0

Можете ли вы указать, что вы подразумеваете под ", но поведение ошибки жестко закодировано"? – tkachuko

ответ

0

В случае, если кто-то натыкается на вопрос

  • Akka HTTP будет большой выбор в общем просто doens't работы, что хорошо для нас (см вопрос)
  • Нетти обеспечивает EmbeddedChannels, который позволяет для выполнения HTTP Parsers/Renderers/Decoders без привязки к сокету. Я думаю, что это в основном предназначено для тестирования, но оно не входит в пакеты .test, а также может использоваться для реализации кодеков более высокого уровня (документация Netty 3.x)