httpkitで空いているポート番号を自動的に割り当てし、割り当てられたポート番号を取得する方法に関するメモ。
サーバ起動時のオプションでport番号を0にすると空いているポート番号を自動で割り当てる。
(require '[org.httpkit.server :refer [run-server]])
(defn handler [req]
{:status 200
:headers {"Content-Type" "text/html"}
:body "hello!"})
(def f (run-server handler {:port 0}))
run-server
の戻り値はサーバを表すオブジェクトではなくサーバを停止するための関数。
このため一見すると起動後のポート番号を知る術が無さそうに見えるが、 実はこの関数のメタデータ :local-port
から割り当てられたポート番号を取得することができる。
(-> (meta f)
:local-port)
;=> 55634