八 月
26
日曜日

httpkitで空いているポート番号を自動割り当て

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