This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2016-02-19
Channels
- # beginners (25)
- # boot (143)
- # braid-chat (9)
- # cider (18)
- # cljs-dev (88)
- # cljsrn (1)
- # clojure (91)
- # clojure-austin (2)
- # clojure-berlin (3)
- # clojure-japan (26)
- # clojure-russia (148)
- # clojurebridge (1)
- # clojured (29)
- # clojurescript (105)
- # cursive (7)
- # data-science (4)
- # datomic (15)
- # devcards (4)
- # emacs (8)
- # euroclojure (2)
- # events (1)
- # gsoc (27)
- # hoplon (3)
- # immutant (3)
- # ldnclj (3)
- # lein-figwheel (9)
- # leiningen (2)
- # luminus (1)
- # off-topic (5)
- # om (176)
- # onyx (136)
- # parinfer (16)
- # proton (13)
- # re-frame (33)
- # reagent (34)
- # spacemacs (1)
- # yada (127)
zeromqまあまあ良い感じですね。jzmqだとライブラリのビルドが面倒だったのでjeromqにしましたがそれなりのパフォーマンスには。
ところでwith-openとcore.asyncを同時に使うとやばい、とかってありますか?
with-open下でgo使ったらリソースが既に閉じられていてエラーになったんですよね…何かマズかったんでしょうか。
goマクロの中でwith-openを呼ぶのは問題なさそうな気がしますけど、goマクロ自体はチャネルを返してくるだけで制御が戻ってきてしまうので、goマクロ内で外側のwith-openでオープンしたリソースにアクセスするとエラーになる可能性はありますね
うーむ。一応with-open内に制御はとどまっているんですよね。ringのサーバを立ち上げているので。
(defn -main [& args]
(with-open [f (io/reader (first args))]
(let [routine (fuction-that-start-gorutine f)]
...
(run-server (site #'routes) {:port 8080}))))
えーっと、内部で2つのgoroutine(タイマーと本スレッド)を作っていて、そのうちのタイマーです。
うーん、なんでしょう。仮に with-open
を使わずに (fuction-that-start-gorutine (io/reader (first args)))
とした場合はエラーにはならないんですか?
なので今letで運用してるんですがちょっと気持ち悪いんですよね。
そうですね。とりあえずはこれでやっていきます。 原因が分からないのは気になるのでそれはまた調べますか。
run-serverでブロックしますね。
closedSequenceみたいな…いまはもうエラー直してるのですぐには出ませんでしたね。
(lazy-seqとwith-openの時と同じエラーですね
http-kit の run-server
は async だと思いますよ。 run-server
の後 println
とかを入れてみてください。たぶん、そのせいだと思います。
確かにprintされました。ありがとうございます。