Class HttpTunnelServer
java.lang.Object
org.springframework.boot.devtools.tunnel.server.HttpTunnelServer
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:
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
Encapsulates an HTTP request/response pair.protected class
The main server thread used to transfer tunnel traffic. -
Constructor Summary
ConstructorDescriptionHttpTunnelServer
(TargetServerConnection serverConnection) Creates a newHttpTunnelServer
instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected HttpTunnelServer.ServerThread
Returns the active server thread, creating and starting it if necessary.protected void
handle
(HttpTunnelServer.HttpConnection httpConnection) Handle an incoming HTTP connection.void
handle
(ServerHttpRequest request, 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 Details
-
HttpTunnelServer
Creates a newHttpTunnelServer
instance.- Parameters:
serverConnection
- the connection to the target server
-
-
Method Details
-
handle
Handle an incoming HTTP connection.- Parameters:
request
- the HTTP requestresponse
- the HTTP response- Throws:
IOException
- in case of I/O errors
-
handle
Handle an incoming HTTP connection.- Parameters:
httpConnection
- the HTTP connection- Throws:
IOException
- in case of I/O errors
-
getServerThread
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
-