Hi all!I've just implemented a lightweight java client for receiving push messages from AeroGear WebPush Server [1]. It is easy to use and fully async!A few words about decision to use Jetty as a HTTP/2 client:Currently there are only 3 Java libraries, which implement client side of HTTP/2 protocol [2]: Netty, Jetty and OkHttp. I tried all of them:
- First of all I tried to use OkHttp. This is a lightweight http client for Android and other Java apps. But currently this library supports HTTP/2 protocol only via old HTTP/1.1 API. It works well for simple request-response, but its client API does not allow to use HTTP/2 features, like Server Push Frames. I looked at GRPC [3], because Googlers use OkHttp for HTTP/2 transport. But they don't use public API, they use only inner classes to handle frames and built their own logic atop this classes. It would be too complicated for our purposes.
- Secondary, I tried to refactor our WebPush console to a client library. But this way is complicated too. netty-codec-http2 does not provide a client API, it is only codec, low level protocol implementation.
- Now I use jetty-http2-client. It is easy to configure and use, fast and async. Jetty provides a user friendly API to handle HTTP/2 streams and get PUSH_PROMISE frames.
For more information, look at my commit history.In the future, if there will be more lightweight alternatives than Jetty (for example, new version of OkHttp or Java 9 API), I will rewrite the transport layer of my library.Here is an example, how to use my library [4].