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 {:keys [port handler buffer-size io-threads worker-threads direct-buffers
server-options socket-options worker-options]
:strojure.undertow.server/keys [handler-fn-adapter wrap-builder-fn]})Starts Undertow server given instance, builder or configuration map.
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.::wrap-builder-fn
(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 declared and chained using function invocations:
;; The chain of HTTP handler in reverse order.
(-> default-handler-fn
;; The handlers for app hostnames.
(handler/virtual-host {:host {"app1" app1-handler-fn
"app2" app2-handler-fn}})
;; Enable sessions for handlers above.
(handler/session-attachment {})
;; The handler for specific path
(handler/path {:prefix {"static" (handler/resource {:resource-manager :class-path
:prefix "public/static"})}
:exact {"websocket" (handler/websocket {:on-connect (fn [{:keys [channel] :as event}])
:on-message (fn [{:keys [channel text] :as event}])
:on-close (fn [event])
:on-error (fn [event])})}})
;; The handler for webapi hostname.
(handler/virtual-host {:host {"webapi.localtest.me" webapi-handler-fn}})
(handler/simple-error-page)
(handler/proxy-peer-address)
(handler/graceful-shutdown))
Or same handler written declarative:
[;; The chain of HTTP handlers in direct order.
{:type handler/graceful-shutdown}
{:type handler/proxy-peer-address}
{:type handler/simple-error-page}
;; The handler for webapi hostname.
{:type handler/virtual-host
:host {"webapi.localtest.me" webapi-handler-fn}}
;; The handler for specific path
{:type handler/path
:prefix {"static" {:type handler/resource
:resource-manager :class-path
:prefix "public/static"}}
:exact {"websocket" {:type handler/websocket
:on-connect (fn [{:keys [channel] :as event}])
:on-message (fn [{:keys [channel text] :as event}])
:on-close (fn [event])
:on-error (fn [event])}}}
;; Enable sessions for next handlers.
{:type handler/session-attachment}
;; The handlers for app hostnames.
{:type handler/virtual-host :host {"app1" app1-handler-fn
"app2" app2-handler-fn}}
default-handler-fn]
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/declare-type]] function.
Starts Undertow server given instance, builder or configuration map.
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]].
- `::wrap-builder-fn`
+ 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 declared and chained using function invocations:
;; The chain of HTTP handler in reverse order.
(-> default-handler-fn
;; The handlers for app hostnames.
(handler/virtual-host {:host {"app1" app1-handler-fn
"app2" app2-handler-fn}})
;; Enable sessions for handlers above.
(handler/session-attachment {})
;; The handler for specific path
(handler/path {:prefix {"static" (handler/resource {:resource-manager :class-path
:prefix "public/static"})}
:exact {"websocket" (handler/websocket {:on-connect (fn [{:keys [channel] :as event}])
:on-message (fn [{:keys [channel text] :as event}])
:on-close (fn [event])
:on-error (fn [event])})}})
;; The handler for webapi hostname.
(handler/virtual-host {:host {"webapi.localtest.me" webapi-handler-fn}})
(handler/simple-error-page)
(handler/proxy-peer-address)
(handler/graceful-shutdown))
Or same handler written declarative:
[;; The chain of HTTP handlers in direct order.
{:type handler/graceful-shutdown}
{:type handler/proxy-peer-address}
{:type handler/simple-error-page}
;; The handler for webapi hostname.
{:type handler/virtual-host
:host {"webapi.localtest.me" webapi-handler-fn}}
;; The handler for specific path
{:type handler/path
:prefix {"static" {:type handler/resource
:resource-manager :class-path
:prefix "public/static"}}
:exact {"websocket" {:type handler/websocket
:on-connect (fn [{:keys [channel] :as event}])
:on-message (fn [{:keys [channel text] :as event}])
:on-close (fn [event])
:on-error (fn [event])}}}
;; Enable sessions for next handlers.
{:type handler/session-attachment}
;; The handlers for app hostnames.
{:type handler/virtual-host :host {"app1" app1-handler-fn
"app2" app2-handler-fn}}
default-handler-fn]
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/declare-type]] function.
(stop instance)Stops server instance, returns nil. The instance can be an instance of
Undertow or map with ::undertow key.
Stops server instance, returns nil. The instance can be an instance of `Undertow` or map with `::undertow` key.
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 |