Groups
Groups
Sign in
Groups
Groups
clojure-ja
Conversations
About
Send feedback
Help
3/26 tokyoclj
40 views
Skip to first unread message
Takahiro Hozumi
unread,
Mar 26, 2011, 10:38:14 AM
3/26/11
Reply to author
Sign in to reply to author
Forward
Sign in to forward
Delete
You do not have permission to delete messages in this group
Copy link
Report message
Show original message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to clojure-ja
こんばんは、穂積です。
今日はありがとうございました。
話の流れで、Aleph と cljque について説明しようとしましたが全然説明できてませんでした。
簡単な説明とリファレンスを記載します。
どちらも非同期イベント処理のためのフレームワークです。
Aleph (by Zach Tellmanさん)
https://github.com/ztellman/aleph
Lamina
Alephで使われてる非同期イベント処理ライブラリ。いつからかAlephから分離された。
https://github.com/ztellman/lamina
clojure conj 時の5分ぐらいの紹介動画
http://clojure.blip.tv/file/4881274/
Aleph では tcp,http server/client、redis client などが実装されています。
現状、Aleph を使って嬉しい事は
・http で web socket を扱うことができる
・通信相手との入出力をチャネルに抽象化できる
・チャネルへの入出力をシーケンス処理ライクに処理できる
ことだ思います。
Network部にNettyを使ってるのでパフォーマンスもいいのかもしれません。
Aleph も Lamina も wiki に丁寧なドキュメントが充実してます。
ただ、パイプライン(Nettyのパイプラインとは別物)の概念など少し難しいと思います。
Aleph は非同期処理に特有のコードが読み難くしている場合がありましたが、
最近、async というマクロを追加して劇的に改善したそうです。
それについては以下が詳しいです。
(async ...) and future directions for Aleph and Lamina
http://groups.google.com/group/aleph-lib/browse_thread/thread/28478c992cbb5555
Async Programming
https://github.com/ztellman/lamina/wiki/Async-Programming
http://dev.clojure.org/display/design/Channels
↑これは Zack さんが clojure に Lamina を提案しているドキュメントのようです。
コメント欄でRich Hickey は非同期イベント処理は .NET の Rx が素晴らしいので参考にして欲しいと言っています。
それを受けてか Stuart Sierra さんが以下の Rx 風な cljque というのを作っています。
cljque (by Stuart Sierraさん)
https://github.com/stuartsierra/cljque
Stuart Sierraさんによる紹介動画 (1時間半!)
http://ontwik.com/clojure/asynchronous-events-in-clojure-by-stuart-sierra/
ActiveMQ, ZeroMQ, Erlang, Lamina, Rx などいろいろな話が出て面白いです。
add-watch という便利な関数の存在も初めて知りました。
cljque はまだ実験的なプロジェクトであり、動くようになっていないとのことです。
.NET の Rx を参考にして作られています。
私は Rx の javascript 版を触ってみたのですが、イベントをシーケンス処理(map, filter等)のように扱えて便利でした。
Aleph もチャネルに対してシーケンス処理のようにイベントを処理できますが、cljque はより汎用的なもののようです。
ソースを見ると cljque(Rx) の API は把握し易くて綺麗だと思いました。
使えるようになるのを期待しています。
Aleph も cljque も Netty を使用していますが、ネットワーク部分を組み立てるのに使っているだけで
非同期処理のコアの部分(AlephはLamina, cljqueはRxっぽいの) にNettyは関係ないです。
Java NIO を使用したフレームワークはNetty以外にもいろいろあります。
Java NIO については次のブログが面白かったです。
HTTPサーバにJava NIOは必要か
http://kanatoko.wordpress.com/2011/02/15/http_server_and_java_nio/
Reply all
Reply to author
Forward
0 new messages