Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Clojureに入門してHTTPサーバーをつくってみた話
Search
Shunsuke Tadokoro
January 31, 2017
Technology
1.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Clojureに入門してHTTPサーバーをつくってみた話
第十八回 渋谷JavaのLT資料です。
Shunsuke Tadokoro
January 31, 2017
More Decks by Shunsuke Tadokoro
See All by Shunsuke Tadokoro
ある日「Webエンジニアなら、Webサーバーは作れますよね」と言われたら? ~ 3つのJVM言語で作って学ぶ
todokr
2
600
Onboarding Process for Scala Team
todokr
0
2.2k
Running Scala on AWS Lambda in a Snappy Way
todokr
7
4.7k
Scalaでつくる ちょっとしたCLIツール
todokr
0
1.1k
新しいプログラミング言語の学び方 HTTPサーバーを作って学ぶ Java, Scala, Clojure
todokr
29
21k
わかる!Java to Clojure
todokr
6
1.9k
Scala絵文字ライブラリに Macroなどを導入してみた
todokr
0
1.5k
emojiconに行ってきました
todokr
2
860
Scalaリファクタリング入門「大改造!静的ビフォー・アフター」
todokr
3
1.3k
Other Decks in Technology
See All in Technology
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
260
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
140
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
280
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
210
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.6k
OSC2026on_the-world-is-waiting-for-your-voice.pdf
naruoga
0
340
Apache Iceberg が拓く AI 時代のオープンレイクハウス
tomtanaka
0
220
Meet AgentCore Identity Consent Portal
hironobuiga
3
180
Claude Designがめちゃくちゃ便利なので使ってほしい
diggymo
0
280
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
480
[2026-09-30]ロックンロールは鳴り止まないっ - 信頼性かまってちゃん - 「データ駆動を投げ捨ててまで。」追いかける信頼性改善に向けた取り組みの話
tosite
0
190
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
270
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.3k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
340
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
510
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
Making the Leap to Tech Lead
cromwellryan
135
10k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
Building Adaptive Systems
keathley
44
3.2k
BBQ
matthewcrist
89
10k
Transcript
$MPKVSFʹೖͯ͠ )551αʔόʔΛͭͬͯ͘Έͨ ौ୩+BWB !UPEPLS ָ͘͠
ా ॴ ॣ ༎ ! U P E
P L S w ג ࣜ ձ ࣾ Ϗ ζ Ϧ ʔ ν ελ ϯόΠ ࣄ ۀ ෦ α ʔ ν ί Ξ ν ʔ Ϝ w 4 D B M B M J B O w & N P K J O F F S
4DBMBº&NPKJͳϥΠϒϥϦΛͭ͘Γ·ͨ͠
ΑΖ͓͘͠ئ͍͠·͢
͓ͳ͢͠Δ͜ͱ w ͜ͱͷൃ w ͭͬͨ͘)551αʔόʔʹ͍ͭͯ w )551αʔόʔʁ w ϦΫΤετ͔ΒϨεϙϯε·Ͱ w
·ͱΊ w )551αʔόʔΛͭͬͯ͘ΈͯΑ͔ͬͨ͜ͱ w $MPKVSFʹೖͯ͠Α͔ͬͨ͜ͱ
͜ͱͷൃ
ʮ)551αʔόʔΛ࡞Δձʯ w ࣾͷ༗ࢤʹΑΔϥϯνษڧձ w ʮ8FCΞϓϦͭ͘Γ͍ͨʂʯ ʮͲͷϨϕϧͰͭ͘Δͷʁʯʮαʔόʔ͔Βͭ͘Δͷ͔ʁʯ w 2JJUBɺ4UBDL0WFSqPXFUDݟͪΌͩΊ w ͏ݴޠͷυΩϡϝϯτ3'$ɺଞݴޠͰͷ࣮ݟ͍͍ͯ
w ʮ5̋,*0ܕΤϯδχΞཆॴʯ
ཱ͔ͪͩΔ͍ͭ͘ͷน w ιέοτͬͯͳΜͰ͔͢ʁ ˠάάͬͯిٿ͔͠ग़ͯ͜ͳ͍ w ը૾͕දࣔͰ͖ͳ͍ ˠόΠφϦͳΜ͔ͩΒ0VUQVU4USFBN8SJUFSͬͪΌμϝ w NVMUJQBSUGPSNEBUB ˠCPVOEBSZʢσʔλͷ۠ΓจࣈྻʣΫϥΠΞϯτ͕ܾΊΔ
4DBMB൛4JNQMF)5514FSWFS
ࠓͷ৽ଔࢀՃͯ͠ γʔζϯ
ࣗ࠶$MPKVSFͰͭ͘Δ͜ͱʹ w ϙʔϧɾάϨΞϜʹ᱐͞Εͨ w ʮ&NBDTͬͯΔͷʹ-JTQॻ͍ͨ͜ͱͳ͍ΜͰ͔͢ʁʯͱઞΒΕͨ w ΞϯαΠΫϩϖσΟΞ͕ͳΜ͔͔ͩͬͨ͢͝
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
IUUQBOTBJLVSPQFEJBPSHXJLJ-*41
ͭͬͨ͘)551αʔόʔʹ͍ͭͯ
None
)551αʔόʔʁ w MPDBMIPTUͷҙͷϙʔτͰػ w 5$1ଓɺ)551ϦΫΤετΛड͚औΔ w )5.-ը૾ͳͲΛ)551Ϩεϙϯεͱͯ͠ฦ͢
ϦΫΤετ͔ΒϨεϙϯε·Ͱ w DPSFDMK w SFRVFTUDMK w SFTQPOTFDMK
DPSFDMK w ΞϓϦέʔγϣϯͷΤϯτϦʔϙΠϯτ w ҙͷϙʔτͰଓΛͪड͚ɺϦΫΤετ͝ͱʹιέοτੜ w ιέοτੜҎ߱ͷॲཧผεϨουͰ࣮ߦ
+BWB $MPKVSF (defn -main [] (let [address (InetSocketAddress. 3000) server-socket
(ServerSocket.)] (.bind server-socket address (int backlog)) (while true (let [socket (.accept server-socket)] ... class SimpleHttpServer { public static void main(String[] args) { InetSocketAddress address = new InetSocketAddress(3000); ServerSocket serverSocket = new ServerSocket(); serverSocket.bind(address); while (true) { Socket socket = serverSocket.accept(); ... ϦΫΤετ͝ͱʹιέοτੜ
SFRVFTUDMK w ιέοτͷ*OQVU4USFBNΛSFBE͠ɺ )551ϦΫΤετͱͯ͠ύʔε w ϦΫΤετͨͩͷ.BQͱͯ͠දݱ
$MPKVSF (let [stream (FileInputStream. file)] (take-while #(not= -1 %) (repeatedly
#(.read readable)))) +BWB InputStream stream = new FileInputStream(file); try { int b = stream.read(); while(b != -1){ // Ωϟετͯ͠ྻʹ٧ΊΔͳͲ } } catch (IOException e) {} *OQVU4USFBNΛ࠷ޙ·ͰSFBE͢Δ
SFTQPOTFDMK w ϦΫΤετΛݩʹɺϑΝΠϧΛόΠτྻ w ιέοτͷ0VUQVU4USFBNʹ)551Ϩεϙϯεͱͯ͠XSJUF
$MPKVSF (str "HTTP/1.1 200 OK" CRLF "Content-Length: " XXX CRLF
"Content-Type: " YYY CRLF) +BWB String resTxt = "HTTP/1.1 200 OK" + CRLF + "Content-Length: " + XXX + CRLF + "Content-Type: " + YYY + CRLF; จࣈྻͷ݁߹
·ͱΊ
)551αʔόʔΛͭ͘Δޮ༻ w Ұ࣍ใʹ͋ͨΕΔΑ͏ʹͳΔ +BWBEPDɺ3'$ɺ&$."ɺFUD w ΠϯλʔωοτͷΈ͕ݟ͑ͯ͘Δ ιέοτɺΧʔωϧɺ5$1ɺ)551ɺFUD ʮेʹൃୡͨ͠ςΫϊϩδຐ๏ͱݟ͚͕͔ͭͳ͍ʯ w ଞͷϛυϧΣΞͷதʹڵຯΛ࣋ͭ
ࠓ%#Λ࡞ͬͯΈ͍ͨ
$MPKVSFʹೖͯ͠Α͔ͬͨ͜ͱ w ؔྗͷ্ ߴ֊ؔແݶϦετɺԆධՁ͕ۙʹ w εϨουϓʔϧΛҙࣝ͢ΔΑ͏ʹ HPͱUISFBEͬͯԿ͕ҧ͏ʁˠछྨಛੑΛؾʹ͢ΔΑ͏ʹͳͬͨ w ঢ়ଶΛͲ͏ѻ͏ʁ00WT$MPKVSFXBZ $MPKVSFͰʮΞΠσϯςΟςΟʯͱʮঢ়ଶʯΛΓ͢
ൺֱ͢Δ͜ͱͰ͓ޓ͍͕ΑΓ໌֬ʹ
IUUQTBZBUPQHJUIVCJPDMPKVSFCFHJOOFS
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ