Class 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:

    Response Codes
    StatusMeaning
    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
    See Also:
    HttpTunnelConnection
    • Method Detail

      • handle

        public void handle​(org.springframework.http.server.ServerHttpRequest request,
                           org.springframework.http.server.ServerHttpResponse response)
                    throws IOException
        Handle an incoming HTTP connection.
        Parameters:
        request - the HTTP request
        response - the HTTP response
        Throws:
        IOException - in case of I/O errors
      • 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