Undertow server functionality (start, stop, options etc.).
Undertow server functionality (start, stop, options etc.).
(define-option alias option)(define-option alias option coerce-fn)Defines keyword alias for Undertow option. The optional coerce-fn is used
to coerce option value to correct Java type.
Defines keyword alias for Undertow option. The optional `coerce-fn` is used to coerce option value to correct Java type.
(set-handler-fn-adapter f)Permanently assigns coercion of Clojure function to HttpHandler. Can be
used by adapters like Ring handler adapter.
Permanently assigns coercion of Clojure function to `HttpHandler`. Can be used by adapters like Ring handler adapter.
(start {:as config
:keys [port handler buffer-size io-threads worker-threads direct-buffers
server-options socket-options worker-options handler-fn-adapter
builder-fn-wrapper]})(start builder)(start server)Starts Undertow server given instance, builder or configuration map. Returns closeable server instance.
Server configuration map options:
:port The map of ports and their listeners.
Undertow$ListenerBuilder or
listener builder configuration map.:host The host name string, default "localhost".:https HTTPS configuration map with options:
:key-managers The instance of javax.net.ssl.KeyManager[].:trust-managers The instance of javax.net.ssl.TrustManager[].:ssl-context The instance of javax.net.ssl.SSLContext.:handler The listener HttpHandler to be used on the port.
See below how to declare handlers.:socket-options The map of socket options for the listener.
:undertow/enable-http2. If HTTP2 protocol enabled, boolean.:use-proxy-protocol boolean.:https enables HTTPS protocol for the listener.:handler The server HttpHandler to be used for all listeners without
handler specified. See below how declare handlers.
:buffer-size integer.
:io-threads The number of IO threads to create.
:worker-threads The number of worker threads, integer.
:direct-buffers If direct buffers enabled, boolean.
:server-options The map of server options.
:socket-options The map of socket options.
:worker-options The map of worker options.
:handler-fn-adapter The function (fn [f] handler)
start, like i.e. ring handler.set-handler-fn-adapter.:builder-fn-wrapper
(fn [f] (fn [builder config] (f builder config))) which
wraps standard builder configuration function f returning new function
on builder and configuration.f.setWorker, setByteBufferPool etc.Server configuration example:
{:port {;; HTTP port listener
8080 {:host "localhost"
:handler (comment "Listener handler declaration.")}
;; HTTPS port listener
4040 {:https {:ssl-context '_}}}
;; Server handler for all listeners without handlers.
:handler (comment "Server handler declaration.")
:server-options {:undertow/enable-http2 true}}
Handler declaration
Handlers can be created and chained explicitly:
(-> (my-handler :default-handler)
;; The handlers for app hostnames.
(handler/virtual-host
{:host {"app1.company.com" (my-handler :app1-handler)
"app2.company.com" (my-handler :app2-handler)}})
;; Enable sessions for next handlers (above).
(handler/session {})
;; Path specific handlers.
(handler/path {:prefix {"static" (handler/resource {:resource-manager :classpath-files
:prefix "public/static"})}
:exact {"websocket" (handler/websocket websocket-callback)}})
;; The handler for webapi hostname.
(handler/virtual-host {:host {"webapi.company.com" (my-handler :webapi-handler)}})
;; Supplemental useful handlers.
(handler/simple-error-page)
(handler/proxy-peer-address))
Or same handler can be written declarative:
[;; Supplemental useful handlers.
{:type handler/proxy-peer-address}
{:type handler/simple-error-page}
;; The handler for webapi hostname.
{:type handler/virtual-host
:host {"app1.company.com" (my-handler :app1-handler)
"app2.company.com" (my-handler :app2-handler)}}
;; Path specific handlers.
{:type handler/path
:prefix {"static" {:type handler/resource :resource-manager :classpath-files
:prefix "public/static"}}
:exact {"websocket" {:type handler/websocket :callback websocket-callback}}}
;; Enable sessions for next handlers.
{:type handler/session}
;; The handlers for app hostnames.
{:type handler/virtual-host
:host {"webapi.company.com" (my-handler :webapi-handler)}}
;; Last resort handler
(my-handler :default-handler)]
Keywords can be used instead of symbols as handler :type values:
{:type ::handler/proxy-peer-address}
There are some Undertow handlers available in the handler namespace. Others
can be used via Java interop or adapted for declarative description using
handler/define-type function.
Starts Undertow server given instance, builder or configuration map. Returns
closeable server instance.
Server configuration map options:
- `:port` The map of ports and their listeners.
+ Can be just a port number for HTTP listener with default configuration.
+ The port listener is an instance of `Undertow$ListenerBuilder` or
listener builder configuration map.
+ Port listener configuration options:
- `:host` The host name string, default "localhost".
- `:https` HTTPS configuration map with options:
- `:key-managers` The instance of `javax.net.ssl.KeyManager[]`.
- `:trust-managers` The instance of `javax.net.ssl.TrustManager[]`.
- `:ssl-context` The instance of `javax.net.ssl.SSLContext`.
- `:handler` The listener HttpHandler to be used on the port.
See below how to declare handlers.
- `:socket-options` The map of socket options for the listener.
- `:undertow/enable-http2`. If HTTP2 protocol enabled, boolean.
+ Other option keywords can be found below in this namespace.
- `:use-proxy-protocol` boolean.
+ The `:https` enables HTTPS protocol for the listener.
+ Declaration of AJP protocol is not supported.
- `:handler` The server HttpHandler to be used for all listeners without
handler specified. See below how declare handlers.
- `:buffer-size` integer.
- `:io-threads` The number of IO threads to create.
- `:worker-threads` The number of worker threads, integer.
- `:direct-buffers` If direct buffers enabled, boolean.
- `:server-options` The map of server options.
- `:socket-options` The map of socket options.
- `:worker-options` The map of worker options.
- `:handler-fn-adapter` The function `(fn [f] handler)`
+ Defines coercion of clojure functions to HttpHandler during invocation
of `start`, like i.e. ring handler.
+ By default, the coercion is not defined and functions cannot be used as
handler.
+ The coercion can be assigned permanently using [[set-handler-fn-adapter]].
- `:builder-fn-wrapper`
+ The function `(fn [f] (fn [builder config] (f builder config)))` which
wraps standard builder configuration function `f` returning new function
on builder and configuration.
+ Allows to customize builder configuration in any way by modifying
builder, config and even ignoring function `f`.
+ Allows to make settings which are not available in declarative
configuration like `setWorker`, `setByteBufferPool` etc.
Server configuration example:
{:port {;; HTTP port listener
8080 {:host "localhost"
:handler (comment "Listener handler declaration.")}
;; HTTPS port listener
4040 {:https {:ssl-context '_}}}
;; Server handler for all listeners without handlers.
:handler (comment "Server handler declaration.")
:server-options {:undertow/enable-http2 true}}
**Handler declaration**
Handlers can be created and chained explicitly:
(-> (my-handler :default-handler)
;; The handlers for app hostnames.
(handler/virtual-host
{:host {"app1.company.com" (my-handler :app1-handler)
"app2.company.com" (my-handler :app2-handler)}})
;; Enable sessions for next handlers (above).
(handler/session {})
;; Path specific handlers.
(handler/path {:prefix {"static" (handler/resource {:resource-manager :classpath-files
:prefix "public/static"})}
:exact {"websocket" (handler/websocket websocket-callback)}})
;; The handler for webapi hostname.
(handler/virtual-host {:host {"webapi.company.com" (my-handler :webapi-handler)}})
;; Supplemental useful handlers.
(handler/simple-error-page)
(handler/proxy-peer-address))
Or same handler can be written declarative:
[;; Supplemental useful handlers.
{:type handler/proxy-peer-address}
{:type handler/simple-error-page}
;; The handler for webapi hostname.
{:type handler/virtual-host
:host {"app1.company.com" (my-handler :app1-handler)
"app2.company.com" (my-handler :app2-handler)}}
;; Path specific handlers.
{:type handler/path
:prefix {"static" {:type handler/resource :resource-manager :classpath-files
:prefix "public/static"}}
:exact {"websocket" {:type handler/websocket :callback websocket-callback}}}
;; Enable sessions for next handlers.
{:type handler/session}
;; The handlers for app hostnames.
{:type handler/virtual-host
:host {"webapi.company.com" (my-handler :webapi-handler)}}
;; Last resort handler
(my-handler :default-handler)]
Keywords can be used instead of symbols as handler `:type` values:
{:type ::handler/proxy-peer-address}
There are some Undertow handlers available in the `handler` namespace. Others
can be used via Java interop or adapted for declarative description using
[[handler/define-type]] function.
(stop instance)Stops server instance, returns nil.
Stops server instance, returns nil.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |