Liking cljdoc? Tell your friends :D

strojure.undertow.server

Undertow server functionality (start, stop, options etc.).

Undertow server functionality (start, stop, options etc.).
raw docstring

define-optionclj

(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.
sourceraw docstring

set-handler-fn-adapterclj

(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.
sourceraw docstring

startclj

(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.

    • 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.

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.
sourceraw docstring

stopclj

(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.
sourceraw docstring

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close