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.3k
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.4k
Other Decks in Technology
See All in Technology
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
120
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
470
導入から定着へ ~コーディングエージェントを日常業務に組み込む実践知~
yukisakai1225
0
180
DGX Spark でどこまでハッキングができるのか?
kash1064
3
1.4k
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
150
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
3
1k
Claude Code on Bedrock で統制をかける小ネタ集/claude-code-bedrock-governance-tips
emiki
1
150
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
410
野蛮なアジャイル [サイボウズ発!]組織の常識を覆した反骨のスクラム実践記 / Barbaric Agile - Enterprise Agile Study Group
ama_ch
0
120
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
1k
[EMNLP26] RIGEL: Self-Distilled Score Adaptation for Image and Video Captioning Evaluation
keio_smilab
PRO
0
110
コンテナ運用におけるネットワーク・コンテナコストの削減方法/How to Reduce Network and Container Costs in Container Operations
masakiokuda
2
370
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
720
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Making Projects Easy
brettharned
120
6.8k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
930
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
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
͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ