2024-05-05 11:13:03 +00:00
< !DOCTYPE html PUBLIC ""
"">
2024-08-19 14:09:46 +00:00
< html > < head > < meta charset = "UTF-8" / > < title > taoensso.telemere.sockets documentation< / title > < link rel = "stylesheet" type = "text/css" href = "css/default.css" / > < link rel = "stylesheet" type = "text/css" href = "css/highlight.css" / > < script type = "text/javascript" src = "js/highlight.min.js" > < / script > < script type = "text/javascript" src = "js/jquery.min.js" > < / script > < script type = "text/javascript" src = "js/page_effects.js" > < / script > < script > hljs . initHighlightingOnLoad ( ) ; < / script > < / head > < body > < div id = "header" > < h2 > Generated by < a href = "https://github.com/weavejester/codox" > Codox< / a > < / h2 > < h1 > < a href = "index.html" > < span class = "project-title" > < span class = "project-name" > Telemere< / span > < span class = "project-version" > 1.0.0-beta18< / span > < / span > < / a > < / h1 > < div id = "langs" > < div class = "lang current" > clj< / div > < div class = "lang" > < a href = "index.cljs.html" > cljs< / a > < / div > < / div > < / div > < div class = "sidebar primary" > < h3 class = "no-link" > < span class = "inner" > Namespaces< / span > < / h3 > < ul > < li class = "depth-1" > < div class = "no-link" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > taoensso< / span > < / div > < / div > < / li > < li class = "depth-2" > < a href = "taoensso.telemere.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > telemere< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.open-telemetry.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > open-telemetry< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.postal.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > postal< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.slack.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > slack< / span > < / div > < / a > < / li > < li class = "depth-3 branch current" > < a href = "taoensso.telemere.sockets.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > sockets< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.streams.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > streams< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.timbre.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > timbre< / span > < / div > < / a > < / li > < li class = "depth-3 branch" > < a href = "taoensso.telemere.tools-logging.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > tools-logging< / span > < / div > < / a > < / li > < li class = "depth-3" > < a href = "taoensso.telemere.utils.html" > < div class = "inner" > < span class = "tree" > < span class = "top" > < / span > < span class = "bottom" > < / span > < / span > < span > utils< / span > < / div > < / a > < / li > < / ul > < / div > < div class = "sidebar secondary" > < h3 > < a href = "#top" > < span class = "inner" > Public Vars< / span > < / a > < / h3 > < ul > < li class = "depth-1" > < a href = "taoensso.telemere.sockets.html#var-handler.3Atcp-socket" > < div class = "inner" > < span > handler:tcp-socket< / span > < / div > < / a > < / li > < li class = "depth-1" > < a href = "taoensso.telemere.sockets.html#var-handler.3Audp-socket" > < div class = "inner" > < span > handler:udp-socket< / span > < / div > < / a > < / li > < / ul > < / div > < div class = "namespace-docs" id = "content" > < h1 class = "anchor" id = "top" > taoensso.telemere.sockets< / h1 > < div class = "doc" > < pre class = "plaintext" > Basic TCP/UDP socket handlers.
2024-05-06 14:10:30 +00:00
< / pre > < / div > < div class = "public anchor" id = "var-handler.3Atcp-socket" > < h3 > handler:tcp-socket< / h3 > < h4 class = "lang current" > clj< / h4 > < div class = "usage" > < code > (handler:tcp-socket {:keys [socket-opts output-fn], :or {output-fn (utils/format-signal-fn)}})< / code > < / div > < div class = "doc" > < pre class = "plaintext" > Experimental, subject to change.
2024-05-05 11:13:03 +00:00
2024-08-07 09:48:04 +00:00
Returns a signal handler that:
2024-05-06 14:10:30 +00:00
- Takes a Telemere signal (map).
- Sends the signal as a string to specified TCP socket.
Can output signals as human or machine-readable (edn, JSON) strings.
2024-05-05 11:13:03 +00:00
Options:
2024-08-07 09:48:04 +00:00
`:output-fn` - (fn [signal]) => string, see `format-signal-fn` or `pr-signal-fn`
2024-05-06 14:10:30 +00:00
`:socket-opts` - {:keys [host port ssl? connect-timeout-msecs]}
`:host` - Destination TCP socket hostname string
`:port` - Destination TCP socket port int
`:ssl?` - Use SSL/TLS (default false)
`:connect-timeout-msecs` - Connection timeout (default 3000 msecs)
2024-05-05 11:13:03 +00:00
Limitations:
- Failed writes will be retried only once.
- Writes lock on a single underlying socket, so IO won't benefit from adding
2024-08-19 14:09:46 +00:00
extra handler threads. Let me know if there's demand for socket pooling.< / pre > < / div > < / div > < div class = "public anchor" id = "var-handler.3Audp-socket" > < h3 > handler:udp-socket< / h3 > < h4 class = "lang current" > clj< / h4 > < div class = "usage" > < code > (handler:udp-socket {:keys [socket-opts output-fn truncation-warning-fn], :or {socket-opts {:max-packet-bytes 512}, output-fn (utils/format-signal-fn)}})< / code > < / div > < div class = "doc" > < pre class = "plaintext" > Highly experimental, subject to change.
Feedback very welcome!
2024-05-05 11:13:03 +00:00
2024-08-07 09:48:04 +00:00
Returns a signal handler that:
2024-05-06 14:10:30 +00:00
- Takes a Telemere signal (map).
- Sends the signal as a string to specified UDP socket.
Can output signals as human or machine-readable (edn, JSON) strings.
2024-05-05 11:13:03 +00:00
Options:
2024-08-07 09:48:04 +00:00
`:output-fn` - (fn [signal]) => string, see `format-signal-fn` or `pr-signal-fn`
2024-05-06 14:10:30 +00:00
`:socket-opts` - {:keys [host port max-packet-bytes]}
`:host` - Destination UDP socket hostname string
`:port` - Destination UDP socket port int
`:max-packet-bytes` - Max packet size (in bytes) before truncating output (default 512)
2024-05-05 11:13:03 +00:00
2024-08-07 09:48:04 +00:00
`:truncation-warning-fn`
Optional (fn [{:keys [max actual signal]}]) to call whenever output is truncated.
Should be appropriately rate-limited!
2024-05-05 11:13:03 +00:00
Limitations:
- Due to UDP limitations, truncates output to `max-packet-bytes`!
- Failed writes will be retried only once.
- Writes lock on a single underlying socket, so IO won't benefit from adding
extra handler threads. Let me know if there's demand for socket pooling.
- No DTLS (Datagram Transport Layer Security) support,
please let me know if there's demand.< / pre > < / div > < / div > < / div > < / body > < / html >