HttpClient backend (Java 11+)

To use, add the following dependency to your project:

"com.softwaremill.sttp.client" %% "httpclient-backend" % "2.0.0-RC6"

This backend is based on java.net.http.HttpClient available from Java 11 onwards and offers:

  • a synchronous backend: HttpClientSyncBackend
  • an asynchronous, Future-based backend: HttpClientFutureBackend
  • an asynchronous, Monix-Task-based backend: HttpClientMonixBackend with streaming support

Websockets

The HttpClient backend supports websockets, where the websocket handler is of type sttp.client.httpclient.WebSocketHandler. An instance of this handler can be created in two ways.

First (the “low-level” one), given an HttpClient-native java.net.http.WebSocket.Listener, you can lift it to a web socket handler using WebSocketHandler.fromListener. This listener will receive lifecycle callbacks, as well as a callback each time a message is received. Note that the callbacks will be executed on the Netty (network) thread, so make sure not to run any blocking operations there, and delegate to other executors/thread pools if necessary. The value returned in the WebSocketResponse will be an instance of java.net.http.WebSocket, which allows sending messages.

The second, “high-level” approach, available when using the Monix variant, is to pass a MonixWebSocketHandler(). This will create a websocket handler and expose a sttp.client.ws.WebSocket[Task] interface for sending/receiving messages.

See websockets for details on how to use the high-level interface.