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:
Response Codes 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 ax-seq
value of1
.- Since:
- 1.3.0
- See Also:
HttpTunnelConnection
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
HttpTunnelServer.HttpConnection
Encapsulates a HTTP request/response pair.protected class
HttpTunnelServer.ServerThread
The main server thread used to transfer tunnel traffic.
Constructor Summary
Constructors Constructor Description HttpTunnelServer(TargetServerConnection serverConnection)
Creates a newHttpTunnelServer
instance.
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected HttpTunnelServer.ServerThread
getServerThread()
Returns the active server thread, creating and starting it if necessary.protected void
handle(HttpTunnelServer.HttpConnection httpConnection)
Handle an incoming HTTP connection.void
handle(org.springframework.http.server.ServerHttpRequest request, org.springframework.http.server.ServerHttpResponse response)
Handle an incoming HTTP connection.void
setDisconnectTimeout(long disconnectTimeout)
Set the maximum amount of time to wait for a client before closing the connection.void
setLongPollTimeout(int longPollTimeout)
Set the long poll timeout for the server.
Constructor Detail
HttpTunnelServer
public HttpTunnelServer(TargetServerConnection serverConnection)
Creates a newHttpTunnelServer
instance.- Parameters:
serverConnection
- the connection to the target server
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 requestresponse
- the HTTP response- Throws:
IOException
- in case of I/O errors
handle
protected void handle(HttpTunnelServer.HttpConnection httpConnection) throws IOException
Handle an incoming HTTP connection.- Parameters:
httpConnection
- the HTTP connection- Throws:
IOException
- in case of I/O errors
getServerThread
protected HttpTunnelServer.ServerThread getServerThread() throws IOException
Returns the active server thread, creating and starting it if necessary.- Returns:
- the
ServerThread
(nevernull
) - 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