際際滷
Submit Search
Non-blocking ^Scalable ̄ Network Programming with ^aleph (by Z.Tellman) ̄
?
1 like
?
4,266 views
Shinnosuke Asahara
Follow
1 of 9
Download now
Download to read offline
More Related Content
Non-blocking ^Scalable ̄ Network Programming with ^aleph (by Z.Tellman) ̄
1.
Non-?\blocking ?^Scalable ̄ ?Network
? Programming ? ? with ?^aleph ?(by ?Z.Tellman) ̄ ? S.Asahara ? @sukenosin
2.
Scalable ?Server ?Programming ??
Scalableなサ`バプログラムをきたい ? C? Java ?NIOやNeFyを聞うと措いが、なかなか中宜.. ? C? JavaでConcurrentなI尖をくのは、措い房い竃がoい.. ? C? ConcurrentなI尖をするなら Clojureが措いらしいが.. ? ?? 宴旋なライブラリがあった ? C? Zach ?Tellman箆の ?^aleph ̄ ? ? C? hFp://github.com/ztellman/aleph ? C? NeFyベ`ス ? C? 岷俊 NeFy ?や ?NIO ?を聞うより、とてもシンプルにける ?
3.
aleph/lamina/gloss ?? 3つのライブラリから撹 ? ?
?lamina ?掲揖豚I尖ライブラリ ? ? ? ? ? ?(Async ?Queue, ?TaskPipeline) ? ? ?gloss ? ?バイナリデ`タのencode/decodeのためのDSL ? ? aleph ?NeFy?lamina?gloss ?ベ`スの ? ? ? ?Network ?Programming ?Framework ?
4.
Network ?Programing ?? Blocking
?I/O ?ベ`ス ? ? Good: ? ?ホストgのinteracUonはきやすい ? ? Bad: ? ? ? ? ?1つのクライアントにつき1つのスレッドMするので、 ? ? 揖r俊A方がえるとオ`バ`ヘッドが寄きくなる ? ?? Non-?\blocking ?I/O ?ベ`ス ? ? Good: ? ?1スレッドで}方のソケットのI尖を佩うため、 ? ? ?揖r俊A方がえたrの紳覆措い ? ? Bad: ? ?イベントドリブンなので、コ`ドがjになりがち ? C? 光クライアントのI尖のM佩砿尖 ? C? ブロックするI尖をけない ?etc.. ?
5.
Blocking ?I/O ;; Networkgでの秘竃薦I尖をイメ`ジしたコ`ド ;;
ブロックされる何蛍があるので1Thread/1Clientが駅勣となる (defn client-process [sock] (send ^Hello, What¨s your name? ̄ sock) ;; 竃薦 (set-name (read-line sock)) ;; ここで秘薦棋ちが軟こる (send ^What¨s your age? ̄ sock) (set-age (read-line sock)) (send ^OK, Thank you! ̄ sock)) ?
6.
Non-?\Blocking ?I/O ;; 念ペ`ジのI尖を、Non-Blocking
I/Oでいた栽のイメ`ジ ;; イベントドリブンのなのでシ`ケンシャルなI尖をするには、 ;; 彜B砿尖が駅勣になる (def client-process [sock event state] (case event :connected (do (send ^Hello, What¨s your name ̄ sock) 0) ;; 肝の彜Bを卦す :received (case state 0 (do (set-name (received event)) (send ^OK, What¨s your age ̄ sock) 1) ;; 肝の彜Bを卦す 1 (do (set-age (received event)) (send ^OK, Thank you! ̄ sock)))))
7.
aleph ;; alephを聞っていた栽のイメ`ジ ;; イベントドリブンなI尖をpromise
のpipelineとして燕F (defn client-process [ch ci] (enqueue ch "What's your name?") (run-pipeline (read-channel ch) ;; read-channelはtask(promise)を卦し、 ;; ブロックしない (fn [received] ;; 貧のtaskがdeliverされたらuされる (set-name received) (enqueue ch "What's your age?") (read-channel ch)) (fn [received] (set-age received) (enqueue ch "OK, Thank you! ̄))))
8.
gloss ;; Cの夛悶イメ`ジでパケットの碧が峰できる (defcodec my-codec
{ :a :int32, :b (g/string :utf-8 :delimiters ["?0"]), :c :ubyte}) ;; エンコ`ド (def encoded (encode my-codec { :a 12345, :b "foo bar baz", :c 111})) ;; encodedの嶄附 (vec (.array (contiguous encoded))) ?? [0 0 48 57 102 111 111 32 98 97 114 32 98 97 122 0 111] ;; デコ`ド (decode my-codec encoded) ?? {:c 111, :b "foo bar baz", :a 12345} ?
9.
その麿秤 ?? Lamina ? C?
hFps://github.com/ztellman/lamina ? C? Stellman箆の盾h啝 ? hFp://www.infoq.com/presentaUons/Event-?\Driven-?\Programming-?\in-?\Clojure ? ?? Gloss ? C? hFps://github.com/ztellman/gloss ? ?? Sample ? C? hFps://github.com/sukenosin/aleph-?\example ? ?
Download