clojure-japan

2016-02-19T02:28:13.000032Z

zeromqまあまあ良い感じですね。jzmqだとライブラリのビルドが面倒だったのでjeromqにしましたがそれなりのパフォーマンスには。

2016-02-19T02:28:31.000033Z

ところでwith-openとcore.asyncを同時に使うとやばい、とかってありますか?

2016-02-19T02:52:29.000034Z

特にないと思います。

2016-02-19T02:58:59.000035Z

with-open下でgo使ったらリソースが既に閉じられていてエラーになったんですよね…何かマズかったんでしょうか。

athos 2016-02-19T03:03:31.000036Z

goマクロの中でwith-openを呼ぶのは問題なさそうな気がしますけど、goマクロ自体はチャネルを返してくるだけで制御が戻ってきてしまうので、goマクロ内で外側のwith-openでオープンしたリソースにアクセスするとエラーになる可能性はありますね

athos 2016-02-19T03:04:08.000037Z

with-openとlazy seqを一緒に使うのと似た問題かと

2016-02-19T03:07:22.000038Z

うーむ。一応with-open内に制御はとどまっているんですよね。ringのサーバを立ち上げているので。

athos 2016-02-19T03:10:48.000039Z

うーん、状況が分からないのでなんとも…

2016-02-19T03:12:51.000040Z

(defn -main [& args]
  (with-open [f (io/reader (first args))]
    (let [routine (fuction-that-start-gorutine f)]
      ...
      (run-server (site #'routes) {:port 8080}))))

athos 2016-02-19T03:15:43.000042Z

function-that-start-goroutineの戻り値は何ですか?

2016-02-19T03:17:18.000044Z

えーっと、内部で2つのgoroutine(タイマーと本スレッド)を作っていて、そのうちのタイマーです。

athos 2016-02-19T03:22:36.000045Z

うーん、なんでしょう。仮に with-open を使わずに (fuction-that-start-gorutine (io/reader (first args))) とした場合はエラーにはならないんですか?

2016-02-19T03:28:52.000046Z

そうです。

2016-02-19T03:29:21.000047Z

なので今letで運用してるんですがちょっと気持ち悪いんですよね。

athos 2016-02-19T03:35:29.000048Z

なるほど。たしかに気持ちは悪いですけど、そのファイルがサーバを落とすまで開きっぱなしでいいならそれでもいい気はします。

2016-02-19T03:36:14.000049Z

そうですね。とりあえずはこれでやっていきます。 原因が分からないのは気になるのでそれはまた調べますか。

2016-02-19T03:36:16.000050Z

もしかして run-server って async ですか?

2016-02-19T03:36:40.000051Z

run-serverでブロックしますね。

athos 2016-02-19T03:39:43.000052Z

ちなみにエラーメッセージはどんな感じですか?

2016-02-19T03:43:51.000053Z

closedSequenceみたいな…いまはもうエラー直してるのですぐには出ませんでしたね。

2016-02-19T03:44:11.000054Z

(lazy-seqとwith-openの時と同じエラーですね

2016-02-19T03:47:21.000055Z

サーバ何を使ってますか?http-kit?

2016-02-19T03:48:09.000056Z

そうです

2016-02-19T03:49:03.000057Z

http-kit の run-server は async だと思いますよ。 run-server の後 println とかを入れてみてください。たぶん、そのせいだと思います。

2016-02-19T03:49:19.000058Z

なるほど…

2016-02-19T03:50:40.000059Z

確かにprintされました。ありがとうございます。

👏 1