org.springframework.boot.devtools.tunnel.server

Class HttpTunnelServer

  • java.lang.Object
    • org.springframework.boot.devtools.tunnel.server.HttpTunnelServer


  • public class HttpTunnelServer
    extends Object
    A server that can be used to tunnel TCP traffic over HTTP. Similar in design to the Bidirectional-streams Over Synchronous HTTP (BOSH) XMPP extension protocol, the server uses long polling with HTTP requests held open until a response is available. A typical traffic pattern would be as follows:
     [ CLIENT ]                      [ SERVER ]
         | (a) Initial empty request     |
         |------------------------------>|
         | (b) Data I                    |
      -->|------------------------------>|--->
         | Response I (a)                |
      <--|<------------------------------|<---
         |                               |
         | (c) Data II                   |
      -->|------------------------------>|--->
         | Response II (b)               |
      <--|<------------------------------|<---
         .                               .
         .                               .
     
    Each incoming request is held open to be used to carry the next available response. The server will hold at most two connections open at any given time.

    Requests should be made using HTTP GET or POST (depending if there is a payload), with any payload contained in the body. The following response codes can be returned from the server:

    Status Meaning
    200 (OK) Data payload response.
    204 (No Content) The long poll has timed out and the client should start a new request.
    429 (Too many requests) There are already enough connections open, this one can be dropped.
    410 (Gone) The target server has disconnected.
    503 (Service Unavailable) The target server is unavailable

    Requests and responses that contain payloads include a x-seq header that contains a running sequence number (used to ensure data is applied in the correct order). The first request containing a payload should have a x-seq value of 1.

    Since:
    1.3.0
    Author:
    Phillip Webb, Andy Wilkinson
    See Also:
    HttpTunnelConnection
    • Constructor Detail

      • HttpTunnelServer

        public HttpTunnelServer(TargetServerConnection serverConnection)
        Creates a new HttpTunnelServer instance.
        Parameters:
        serverConnection - the connection to the target server
    • Method Detail

      • setLongPollTimeout

        public void setLongPollTimeout(int longPollTimeout)
        Set the long poll timeout for the server.
        Parameters:
        longPollTimeout - the long poll timeout in milliseconds
      • setDisconnectTimeout

        public void setDisconnectTimeout(long disconnectTimeout)
        Set the maximum amount of time to wait for a client before closing the connection.
        Parameters:
        disconnectTimeout - the disconnect timeout in milliseconds