Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
TCPサーバ入門
Search
ryuichi1208
August 02, 2020
160
0
Share
TCPサーバ入門
TCPサーバ入門
ryuichi1208
August 02, 2020
More Decks by ryuichi1208
See All by ryuichi1208
会話で作る信頼性
ryuichi1208
0
140
シグナル(Unix)と仲良くなる
ryuichi1208
1
28
AI前提のサービス運用について再考する
ryuichi1208
6
1.4k
A Shallow Dive into the World of TCP
ryuichi1208
1
650
入門リトライ
ryuichi1208
20
8k
超入門SRE 2025
ryuichi1208
4
1.5k
Goで作って学ぶWebSocket
ryuichi1208
5
4.1k
コード化されていない稼働中のサーバを移設_再構築する技術
ryuichi1208
20
15k
AI前提のサービス運用ってなんだろう?
ryuichi1208
9
2k
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Code Reviewing Like a Champion
maltzj
528
40k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
How to train your dragon (web standard)
notwaldorf
97
6.6k
ラッコキーワード サービス紹介資料
rakko
1
2.9M
Music & Morning Musume
bryan
47
7.1k
How to make the Groovebox
asonas
2
2.1k
Building the Perfect Custom Keyboard
takai
2
720
The World Runs on Bad Software
bkeepers
PRO
72
12k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.6k
The agentic SEO stack - context over prompts
schlessera
0
740
Transcript
͍Ζ͍Ζͳ5$1αʔό
5$1Ͱ௨৴͢Δखॱ αʔό • ιέοτΛ࡞Δ(socket) • ଓͪΛ͢ΔIPΞυϨεͱϙʔτΛઃఆ͢Δ • ιέοτʹ໊લΛ͚ͭΔ(bind) • ଓͪ͢Δ(listen)
• ΫϥΠΞϯτ͔ΒͷଓΛड͚͚Δ(accept) • ௨৴Λߦ͏(read/write) ΫϥΠΞϯτ • ιέοτΛ࡞Δ • ଓ૬खΛઃఆ͢Δ • ଓ͢Δ • ௨৴Λߦ͏
ΞʔΩςΫνϟ ϓϩηε ϚϧνϓϩηεϚϧνεϨου 1SFGPSL Πϕϯτۦಈ ϋΠϒϦου
ϓϩηε ΫϥΠΞϯτ αʔό ϓϩηε
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL
ϚϧνϓϩηεϚϧνεϨου ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε 'PSL
1SFGPSL ΫϥΠΞϯτ αʔό .BTUFS ϓϩηε ࢠϓϩηε ࢠϓϩηε ༧ΊGPSL͓ͯ͘͠ ࠷େಉ࣌ଓࢠϓϩηεͷ
1SFGPSL ࠷େಉ࣌ଓࢠϓϩηεͷ ૿ͤ૿͢΄Ͳεϧʔϓοτ্͕Δʁ ݶքͲ͜ʁ
1SFGPSL $, αʔόʔͷϋʔυΣΞੑೳͳ͍ʹ͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌ଓ͕ଟ͘ͳΔͱαʔϏεͷԠ͕͘ ͳΔ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰίετ͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ͋Δ
ιέοτΛ͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DLͱผ ͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ
1SFGPSL $, αʔόʔͷϋʔυΣΞੑೳͳ͍ʹ͔͔ΘΒͣɺΫϥΠΞϯτͷಉ࣌ଓ͕ଟ͘ͳΔͱαʔϏεͷԠ͕͘ ͳΔ ίϯςΩετεΠονͷ૿Ճ ϓϩηε͕૿͑͗͢Δͱͦ͏ͳΔɻεϨουͰίετ͍͕ى͜Δ ϨʔείϯσΟγϣϯ εϨουͳΒΫϦςΟΧϧηΫγϣϯͩͬͨΓڞ༗ϝϞϦͰͷΓऔΓͩͬͨΓͰ͔͞Ήίετ ϝϞϦ্ݶϑΝΠϧσΟεΫϦϓλ্ݶ εϨου͋ͨΓͰݻఆͷϝϞϦΛফඅ͢Δ͠ϓϩηε͝ͱʹඞཁͳϝϞϦ͋Δ
ιέοτΛ͏ͷͰϑΝΠϧσΟεΫϦϓλͷ্ݶʹ͋ͨͬͨΓ͢Δ εϩʔΫϥΠΞϯτ DLͱผ ͍ΫϥΠΞϯτ͕͍ͨΒϓϩηεΛઐ༗͞ΕΔ αʔόϦιʔεۭ͍͍ͯΔͷʹಉ࣌ଓʹݶք͕ʜͲ͏͢ΕΑ͍͔ʜ
Πϕϯτۦಈ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ ϓϩηεͰෳΫϥΠΞϯτͷΞΫηεΛ͘͞ *0ଟॏԽ
ϓϩηεͱ w ࣮ߦதͷϓϩάϥϜͷΠϝʔδɻػցޠͷϓϩάϥϜ͕ϝϞϦʹಡΈࠐ·Εͯʮϓϩηοα $16 ʯͷ࣮ߦͷରʹͳͬͨͷɻ w ϑΝΠϧͷΞΫηε੍ޚʹ༻͍Δݖݶ ར༻ऀͷࣝผࢠɺར༻ऀͷάϧʔϓͷࣝผࢠ Λ࣋ͭ w
ϓϩηεͷૢ࡞ɺੜɺऴྃɺڧ੍ऴྃɺϓϩάϥϜͷ࣮ߦɺҰ࣌ఀࢭɺ࠶։ɺσόοάͳͲɻ w ̏ͭͷجຊతͳঢ়ଶΛ࣋ͭ w $16ಉ࣌ʹҰͭͷॲཧ͔͠Ͱ͖ͳ͍ ϒϩοΩϯάͱ w ʮ˓˓͍ͯ͠Δ࠷தଞͷॲཧΛ͠ͳ͍ͰͬͯΔΑʙʯͷ͜ͱ w ྫ͑ϓϩηε͕SFBE XSJUF Ͱ௨৴ઌ͔ΒσʔλΛ͍ͬͯΔؒϒϩοΩϯά w ίωΫγϣϯཱ֬ޙɺΫϥΠΞϯτ͔ΒϦΫΤετ͕ૹΒΕͯ͘Δ·Ͱͷػ࣌ؒ w %#֎෦"1*ͷॲཧΛ͍ͯ͠Δ࣌ؒ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ͪ ॲཧ͞Εͳ͍
ॲཧ͞Εͳ͍ ϓϩηε͕ෳͷίωΫγϣϯΛѻ͏ͱྫ͑ͦΕ͕ϒϩοΫͨ࣌͠Ͱఀࢭ͕શͯࢭ·ͬͯ͠·͏ 0@/0/#-0$,ͱ͔ͰϊϯϒϩοΩϯά͢Δ͜ͱͰ͖Δ͕&"("*/ΛϋϯυϦϯά͢Δͷେม
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ SFBE ͪ ॲཧ͞Εͳ͍
ॲཧ͞Εͳ͍ ͜͜Ͱొ͢Δͷ͕*0.VMUJQMFYJOH *0ͷଟॏԽ
*0.VMUJQMFYJOHͱ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰཧ͢Δ͜ͱ ɾ(epollϑΝΠϧσΟεΫϦϓλͷʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽࢹվળ͞Ε͍ͯΔ) ɾepoll_wait(2)Πϕϯτൃੜ·ͰฦΒͳ͍ ɾίϯςΩετεΠονൃੜ͠ͳ͍ ɾΠϕϯτ = ΫϥΠΞϯτ͔ΒͷwriteɺαʔόଆͷSND_BUF͕͍ͬͺ͍ ɾλΠϜΞτͳΜ͔(͜ΕͰ࣮͞Ε͍ͯͨΓ͢Δ) ɾͪͳΈʹrecv(2)ϒϩοΩϯά
ɾσʔλͷ౸ணޙʹϓϩηεʹॲཧ͍ͤͨ͞ͳΒAIOͳͲ͕ඞཁ ɾgoroutineͳΜ͔ཪͰ͜ΕΛ͍ͬͯΔ ɾNode.jsmemcachedlibuvlibevͳͲͰϥοϓͨ͠ϥΠϒϥϦΛ͍ͬͯΔ ΠϕϯτϧʔϓϞσϧMJTUFO͢ΔιέοτFQPMM@XBJU Ͱࢹͯ͠ɺίωΫγϣϯ͕དྷ͔ͨͲ͏͔νΣοΫγͨΓ͢Δඞཁ͋Δ
*0.VMUJQMFYJOHͱ ɾpoll()ɺselect()ɺepollγεςϜίʔϧΛར༻ͯ͠ɺෳͷϑΝΠϧσΟεΫϦϓλΛ1ͭͷϓϩηεͰཧ͢Δ͜ͱ ɾ(epollϑΝΠϧσΟεΫϦϓλͷʹ੍ݶ͕ແ͍ͷʹՃ͑ͯɺϑΝΠϧσΟεΫϦϓλͷঢ়ଶมԽࢹվળ͞Ε͍ͯΔ) ɾಉظ/ඇಉظIO ɾϒϩοΩϯά/ϊϯϒϩοΩϯάIO ɾͦΕͧΕผ ɾҰ൪͍͍ͷඇಉظϊϯϒϩοΩϯά͕࣮͕ͩΑ͘ͳ͍ ɾ(Ϧʔφεౖ͕ܹ͍ͯͨ͠) ɾϗοτͳͷio_uringͱ͍͏LinuxͰඇಉظIOΛ͢ΔͨΊͷAPI ɾ·ͩ·ͩރΕͯͳ͍ͷͰຊ൪ೖ·ͩઌ͔ʁ
* ࢀߟ: Linuxʹ͓͚ΔඇಉظIOͷ࣮ʹ͍ͭͯ https://qiita.com/tmsn/items/0b9e5f84f9fbc56c1c82
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε௨ 04ʹσʔλ͕͖ͨΒ௨͢Δ
Πϕϯτۦಈ ΫϥΠΞϯτ αʔό ϓϩηε εϩʔΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM Πϕϯτ͕ൃੜͨ͠ ιέοτΛϓϩηε௨ ॲཧՄೳ
ॲཧՄೳ SFBE ͳͲͰϒϩοΩϯά
ϋΠϒϦου ΫϥΠΞϯτ αʔό ϓϩηε ΫϥΠΞϯτ ΫϥΠΞϯτ &QPMM ϓϩηε &QPMM .BTUFS
ϓϩηε ΫϥΠΞϯτ 1SFGPSL Πϕϯτۦಈ ϚϧνίΞγγεςϜͳΒઈରʹͬͪ͜Λ͏
Ϛϧνϓϩηε ϚϧνεϨου 1SFGPSL Ϛϧνϓϩηε ϚϧνεϨου "QBDIFIUUQ QSFGPSN UISFBE 4BNCB
BNBWJTE .Z42- 1PTUHSF42- /HJOY "QBDIFIUUQ FWFOU 3FEJT .FNDBDIFE /PEFKT