我发现一个解决方案,通过清除noir.core/noir-routes
,noir.core/route-funcs
,noir.core/pre-routes
和noir.core/post-routes
。下面我有启动三个服务器都用自己的观点命名空间的例子。
(ns my-three.server
(:require
[noir.core :as noir]
[noir.server :as server]))
(def ^:dynamic *servers* (atom {}))
(defn clear-routes []
(do
(reset! noir/noir-routes {})
(reset! noir/route-funcs {})
(reset! noir/pre-routes (sorted-map))
(reset! noir/post-routes [])
nil))
(defn start-server [port mode]
(if-let [s (@*servers* port)]
(println "Server already running on port" port)
(swap! *servers* assoc port (server/start port {:mode mode}))))
(defn stop-server [port]
(let [s (@*servers* port)]
(server/stop s)
(swap! *servers* dissoc port)))
(defn stop-all []
(doall (map stop-server (keys @*servers*))))
(defn -main [& m]
(let [mode (if (nil? (first m)) :prod (first m))]
(server/load-views "src/my_three/views/web/")
(start-server 8080 mode)
(clear-routes)
(server/load-views "src/my_three/views/mobile_downstream/")
(start-server 8081 mode)
(clear-routes)
(server/load-views "src/my_three/views/mobile_upstream/")
(start-server 8082 mode)))