Slide 1

Slide 1 text

Server Side SwiftΛ࢖ͬͨ αʔϏε։ൃͱͦͷӡ༻Λߟ͑Δ Yuki Takei@TSSS meetup #6 27 Jan, 2017

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

Serve-Side-SwiftͰෳ਺ͷOSSΛެ։͍ͯ͠·͢ʂ • Slimane: Web Framework + Web Server • Prorsum: Go Style Concurrent System and Networking Library • SwiftKnex: QueryBuilder for Mysql

Slide 4

Slide 4 text

͜ͷ౓ɺෆ࿑ॴಘΛಘ͍ͨʂͱ͍͏͜ͱͰɺ αʔϏεΛҰຊग़͢͜ͱʹ͠·ͨ͠ɻʢসʣ

Slide 5

Slide 5 text

ϓϥΠϕʔτΧϯύχʔͰ࡞ΔͨΊɺ ͋Δఔ౓ԿΛͯ͠΋OK…ͱ͍͏͜ͱͰ

Slide 6

Slide 6 text

Server Side SwiftͰ։ൃ͢Δ͜ͱʹ͠·ͨ͠ʂ

Slide 7

Slide 7 text

ɾ࣮ӡ༻Λલఏͱͯ͠ͲͷΑ͏ʹػೳ։ൃΛ͍͔ͯ͘͠ʁ ɾ࣮ࡍͷӡ༻ΛͲ͏͢Δ͔ʁ ࠓճ͸ɺServer Side SwiftͰ ͱ͍ͬͨ࿩͕Ͱ͖Ε͹ͱࢥ͍·͢ɻ

Slide 8

Slide 8 text

۩ମతͳαʔϏε಺༰ʹ͸৮Εͣɺ ٕज़తͳ؍఺Ͱൃද͍͖ͯ͠·͢ɻ

Slide 9

Slide 9 text

• εΫϨΠϐϯάͰwebίϯςϯπΛूΊΔ • ίϯςϯπΛղੳ͠ɺΫϥελϦϯάɺΧςΰϥ Πζ • ղੳޙͷίϯςϯπΛ࢖ͬͨwebαʔϏεΛ։ ൃ͢Δ • ϢʔβʔߦಈΛղੳͤ͞ɺϢʔβʔʹఏڙ͢Δί ϯςϯπΛֶशɺมԽͤ͞Δ αʔϏεཁ݅

Slide 10

Slide 10 text

• εΫϨΠϐϯάͰwebίϯςϯπΛूΊΔ • ίϯςϯπΛղੳ͠ɺΫϥελϦϯάɺΧςΰϥ Πζ • ղੳޙͷίϯςϯπΛ࢖ͬͨwebαʔϏεΛ։ ൃ͢Δ • ϢʔβʔߦಈΛղੳͤ͞ɺϢʔβʔʹఏڙ͢Δί ϯςϯπΛֶशɺมԽͤ͞Δ αʔϏεཁ݅ ͜͜͸PythonͰ΍Δͱͯ͠

Slide 11

Slide 11 text

• εΫϨΠϐϯάͰwebίϯςϯπΛूΊΔ • ίϯςϯπΛղੳ͠ɺΫϥελϦϯάɺΧςΰϥ Πζ • ղੳޙͷίϯςϯπΛ࢖ͬͨwebαʔϏεΛ։ ൃ͢Δ • ϢʔβʔߦಈΛղੳ͠ɺϢʔβʔʹఏڙ͢Δίϯ ςϯπΛֶशɺมԽͤ͞Δ αʔϏεཁ݅ ͜͜ΛSwiftͰ΍Δ͜ͱʹ͠·ͨ͠

Slide 12

Slide 12 text

• Ϋϥ΢υαʔϏε͸ͲΕΛ࢖͏ʁ • ϑϨʔϜϫʔΫ͸Ͳ͏͢Δʁ • σʔλϕʔε͸Ͳ͏͢Δʁ • ΞϓϦ΍WebͳͲͷΫϥΠΞϯτͱ͸Ͳ͏௨৴͢ Δʁ • Swiftαʔόʔͷӡ༻ͱσϓϩΠ͸Ͳ͏͢Δʁ SwiftͰWebαʔϏεΛ࡞Δͱ͍ͬͯ΋ʁ

Slide 13

Slide 13 text

Ϋϥ΢υαʔϏε͸ԿΛ࢖͏ʁ • Swift͸όΠφϦͳͷͰVM͕ͳ͍ɻͦͷͨΊޓ׵ ੑͷ͋ΔOSͰ͋Ε͹ͳΜͰ΋OK • Ubuntu্ͰόΠφϦͷ࣮ߦɺσʔϞϯԽ͕ग़དྷ Δ΋ͷͰ͋Ε͹OK • ͋ͱ͸ɺ͓ۚ࣍ୈ

Slide 14

Slide 14 text

• Swift੡ͷWebϑϨʔϜϫʔΫ͸਺ଟ͘ଘࡏ͢Δ • ༗ྗͳͷ͸ɺKitura or vapor͔ʢຊ൪ӡ༻ͷ࣮੷͕ ෆ໌ͳ্ɺރΕ͍ͯΔͱ͸ݴ͑ͳ͍ʣ • ίϛϡχςΟͷن໛ͱ։ൃεϐʔυΛॏࢹ • ݴޠͷ੒௕΋ؚΊɺ1೥ޙʹ͸શ͘ҧ͏΋ͷʹͳͬͯ ͍ΔՄೳੑ͕ߴ͍ɻࠜؾڧ͘ϝϯς͢Δ֮ޛ͕ඞཁ • ։ൃ͕͍͖ͳΓStop͢Δةݥੑ΋(Slimane͕ͦ͏…) ϑϨʔϜϫʔΫ͸Ͳ͏͢Δʁ

Slide 15

Slide 15 text

• ͋·ΓϓϩάϥϜݴޠ͸ؔ܎ͳ͍ • αʔϏεཁ݅࣍ୈͰԿΛ࢖͏ͷ΋ࣗ༝ • ͨͩ͠ɺSwiftͰ͸DBʹΑͬͯ͸υϥΠό͕ଘࡏ ͠ͳ͍ or ރΕ͍ͯͳ͍ͨΊࣗ࡞͢Δඞཁ͕͋Δ ৔߹΋ σʔλϕʔε͸Ͳ͏͢Δʁ

Slide 16

Slide 16 text

• HTTP/1.1Λ࢖ͬͨRest API+JSON͕Ұൠత͔ • apple͕ެࣜͰSwift൛protocol buffersΛαϙʔτ ͍ͯͯ͠ɺਓؾ͕ٸ্ঢத • γϯάϧϖʔδ΍ωΠςΟϒͰͳ͍৔߹͸ɺαʔ όʔαΠυϨϯμϦϯάͰ΋OKʢSwift੡ͷςϯ ϓϨʔτΤϯδϯ΋ෳ਺ݸଘࡏ͢Δʣ ΞϓϦ΍WebͳͲͷΫϥΠΞϯτͱ͸Ͳ͏௨৴͢Δʁ

Slide 17

Slide 17 text

• SwiftαʔόʔΛී௨ʹཱͪ͋͛ͯӡ༻͢Δ৔߹͸ɺ super visorͰϓϩηεΛ؂ࢹ͢Δͷ͕Ұൠత • Docker(Ubuntu)΋໰୊ͳ͘࢖͑Δ • VMݴޠͰ͸ͳ͍ͷͰɺӡ༻͢ΔOSͰϏϧυ͢Δඞཁ ͕͋Δ • CI Tool(Ubuntu)ͰϏϧυͯͦ͠ͷόΠφϦΛσϓϩΠ ͢Δ͔ɺDocker ContainerΛ࡞ͬͯσϓϩΠ͕Ұൠత Swiftαʔόʔͷӡ༻ͱσϓϩΠ͸Ͳ͏͢Δʁ

Slide 18

Slide 18 text

Ҏ্ͷ͜ͱΛߟྀ͢Ε͹ɺSwiftͰ΋αʔόʔ։ൃ͕ՄೳͰ͢

Slide 19

Slide 19 text

·ͨɺ͜Ε·Ͱͷ·ͱΊͱͯ͠

Slide 20

Slide 20 text

ϝδϟʔͳαʔόʔݴޠͱൺֱͯ͠ɺ ಉ༷ͳ఺ɾҟͳΔ఺΋গ͠ݟ͍͖ͯ·͠ΐ͏

Slide 21

Slide 21 text

ଞͷϝδϟʔͳWeb։ൃݴޠͱಉ༷ͳ఺ • Ϋϥ΢υαʔϏε • ϛυϧ΢ΣΞ΍DB • جຊతͳWebαʔϏεͷߏ੒ • جຊతͳαʔόʔΞʔΩςΫνϟ(preforkɺevent driven etc..) • ΫϥΠΞϯτͱͷ௨৴पΓ • CIɺςετ؀ڥ

Slide 22

Slide 22 text

• ͦ΋ͦ΋ຊ൪ӡ༻࣮੷͕ஶ͘͠গͳ͍ • ެࣜαϙʔτͷOS͕·ͩ·ͩଟ͘ͳ͍(LinuxͰ΋Destribution ʹΑͬͯ͸ಈ͔ͳ͍͜ͱ΋) • ݴޠͱϑϨʔϜϫʔΫͷ੒௕͕ૣ͍ͨΊɺࠜؾڧ͍ϝϯς͕ ඞཁ • SPMͰ࢖͑ΔϥΠϒϥϦ͸·ͩ·ͩগͳ͍ͨΊɺࣗ࡞͢Δ΋ ͷ͕ଟ͍ (AWS-SDKͱ͔ͱ͔…) • ΫϥΠΞϯτ(iOSɺMac)ͱαʔόʔؒͰιʔείʔυͷڞ༗ ͕Ͱ͖Δ ଞͷϝδϟʔͳWeb։ൃݴޠͱҟͳΔ఺

Slide 23

Slide 23 text

Ͱ͸ɺ͜ΕΒΛ౿·͑

Slide 24

Slide 24 text

ࠓճͷαʔϏεͰɺ ͲͷΑ͏ʹ։ൃɾӡ༻͍͔ͯ͘͠Λൃද͍͖ͯ͠·͢

Slide 25

Slide 25 text

• Ϋϥ΢υαʔϏε͸AWS • GRPCΛ࠾༻͠ɺWebϑϨʔϜϫʔΫ͸࢖Θͳ͍ • ௨৴ͷγϦΞϥΠζϑΥʔϚοτʹ͸protocol buffersΛ ར༻ʢweb͸JSONʹϑΥʔϧόοΫʣ • σʔλϕʔεʹ͸Mysql 5.7Λ࠾༻ • ΞϓϦ͸ReactNativeͰ࡞Δ͔΋ • Circle CI͔ΒϏϧυͱσϓϩΠΛߦ͏ ߏ੒ͱେ࿮

Slide 26

Slide 26 text

αʔόʔߏ੒ਤ εΫϨΠϐϯά Lambda ղੳ JSON HTTP/1.1 ALB ECS GRPC Service ECS JSON <-> PB Proxy Service JSON HTTP/2.0

Slide 27

Slide 27 text

• Swiftαʔόʔӡ༻΋໰୊ͳ͘ग़དྷΔ • αʔόʔϨεӡ༻͕͠΍͍͢ (εΫϨΠϐϯά͸ lambdaΛఆظ࣮ߦ • ECS͕ศར͗͢Δ • http/2.0͕ALBͰ࢖͑Δ QɿΫϥ΢υαʔϏε͸ʁ AɿΫϥ΢υαʔϏε͸AWS

Slide 28

Slide 28 text

• ࠓճͷαʔϏεͰ͸ɺෳࡶͳRouting΍ɺαʔ όʔαΠυϨϯμϦϯά͕ෆཁ • ਖ਼௚ɺGraphQL΋͔ͳΓؾʹͳΔ • GRPCͷଞɺ͓ख੡ͷWebαʔόʔΛΞϓϦέʔ γϣϯαʔόʔͱͯ͠࢖͏ʢޙड़ʣ • Model෦෼ͷΈɺ͓ख੡ͷQueryBuilderΛ༻͍Δ ʢޙड़ʣ QɿϑϨʔϜϫʔΫ͸ʁ AɿGRPCΛ࠾༻͠ɺϑϨʔϜϫʔΫ͸࢖Θͳ͍

Slide 29

Slide 29 text

GRPCͱ͸ʁ www.grpc.io • google੡ͷRPCϑϨʔϜϫʔΫ • సૹϑΥʔϚοτ͕protocol buffers • ௨৴΋ؚ·ΕΔ • HTTP/2.0ඞਢ • ༷ʑͳݴޠ༻ʹplugin͕͋Δ • ϚΠΫϩαʔϏεؒͷ௨৴ʹgoogleͰ࢖͍ͬͯΔΒ͍͠

Slide 30

Slide 30 text

Swift༻ͷϓϥάΠϯ΋͋Γ·͢

Slide 31

Slide 31 text

• Amazon Aurora΁ͷҠ২Λߟྀ • ϊϯεΩʔϚͳεΫϨΠϐϯάσʔλ͸JSONܕͰ อଘ͢Δ(Mongo΍ESͷӡ༻͸͠ΜͲ͗͢) • ͋Δ͍͸ɺεΫϨΠϐϯάσʔλΛS3ʹอଘ͠ Amazon AthenaͰݕࡧͰ͖ͨΒເͷΑ͏ • ͓ख੡ͷMYSQLυϥΠόͰ௨৴͢Δ Qɿσʔλϕʔε͸ʁ A : Mysql5.7Λ࠾༻

Slide 32

Slide 32 text

• ωΠςΟϒΫϥΠΞϯτͱɺϚΠΫϩαʔϏεؒͷ ௨৴͸protocol-buffers • webΫϥΠΞϯτͷ௨৴͸JSONʹϑΥʔϧόοΫ • Androidઐଐͷ։ൃऀ͕͍ͳ͍ͷͰɺωΠςΟϒΫ ϥΠΞϯτ͸ReactNativeͰ΍ΔՄೳੑ͕ߴ͍ Q : ΫϥΠΞϯτͱͷ௨৴͸ʁ AɿGRPC(protocol-buffers)ͱHTTP/1.1+JSON

Slide 33

Slide 33 text

• swift buildޙʹdocker containerΛCircleCI্Ͱ࡞ ੒ • CircleCI͔ΒECSͷΦʔέετϨʔγϣϯΛ࣮ߦ • Blue/GreenσϓϩΠϝϯτ • ΑͬͯɺSwiftઐ༻ͷσϓϩΠπʔϧ͸ෆཁ Q : σϓϩΠ͸Ͳ͏͢Δʁ A : Circle CIͰϏϧυͱσϓϩΠΛߦ͏

Slide 34

Slide 34 text

σϓϩΠϑϩʔਤ git push hook ɾϚΠάϨʔγϣϯ ɾσϓϩΠ ɾdockerίϯςφͷ੾Γସ͑ ɾswift build ɾςετ ɾ֤छdockerίϯςφͷ࡞੒

Slide 35

Slide 35 text

·ͣ͸ɺ͜ͷߏ੒ͰαʔϏε։ൃͱӡ༻ Λߦ͍ͬͯ͜͏ͱࢥ͍·͢ɻ

Slide 36

Slide 36 text

ͨͩ͠ɺϑϨʔϜϫʔΫΛ࢖Θͳ͍ͨΊɺ ͜ͷ··͙͢ʹ։ൃʹೖΔͷ͸ͪΐͬͱେมͰ͢ɻ

Slide 37

Slide 37 text

• Webܥͷػೳ͕શવͳ͍(HTTPαʔόʔɺ WebSocketͳͲ) • LinuxͰಈ͔ͳ͍API͕·ͩ·ͩ͋Δ • ඇಉظॲཧ͸DispatchQueueΛ࢖͏͜ͱʹͳΔ ͕ɺcallbackϕʔεʹͳΔ • GCD͸threadϕʔεͳͷͰɺϨʔείϯσΟγϣ ϯ͕ා͍ Swiftඪ४Ͱ͸…

Slide 38

Slide 38 text

ͦ͜Ͱ

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

• Swift੡ͷωοτϫʔΫϓϩάϥϛϯά؀ڥ (LinuxͰͪΌΜͱಈ͘) • ୤ίʔϧόοΫϔϧΛओ؟ʹɺGOελΠϧͳฒྻॲཧ/ಉظػೳΛ ࣋ͭʢCoroutine͸ͳ͍ʣ • TCPɺDNSͳͲجຊతͳωοτϫʔΫػೳΛCF**Λ࢖Θͣʹఏڙ • HTTP(S)/1.1ɺWebSocketͷαʔόʔɺΫϥΠΞϯτΛఏڙ • TLSʹ͸libresslΛ࠾༻ • NonBlocking I/OͱBlocking I/O+GCDΛ૊Έ߹ΘͤͨϋΠϒϦου ϞσϧͳαʔόʔΞʔΩςΫνϟ(KituraΑΓߴ଎) Prorsum

Slide 41

Slide 41 text

SwiftͰඇಉظॲཧͷయܕྫ

Slide 42

Slide 42 text

͜ɺ͜Ε͸…

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

CallBack Hellʂ

Slide 45

Slide 45 text

·ͨɺThread ϓϩάϥϛϯάʹΑ͋͘Δͷ͕… IPA ηΩϡϦςΟηϯλʔ ϨʔείϯσΟγϣϯͷҰൠతରࡦΑΓ

Slide 46

Slide 46 text

·ͨɺThread ϓϩάϥϛϯάʹΑ͋͘Δͷ͕… IPA ηΩϡϦςΟηϯλʔ ϨʔείϯσΟγϣϯͷҰൠతରࡦΑΓ ϨʔείϯσΟγϣϯ΍σουϩοΫ

Slide 47

Slide 47 text

Swift͸͜ΕΒͷ໰୊ΛજࡏతʹሃΉ…

Slide 48

Slide 48 text

ͨͩ͠

Slide 49

Slide 49 text

͜ΕΒΛ͏·͘ղܾͨ͠ݴޠ͕͋Γ·ͨ͠

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

ͦ͏ɺΈΜͳେ޷͖GoݴޠͰ͢

Slide 52

Slide 52 text

Goݴޠ͸ɺGoroutineͰฒྻ/ฒߦॲཧΛߦ͍ɺ ChannelͰಉظΛͱ͍ͬͯ·ͨ͠ɻ

Slide 53

Slide 53 text

Goroutine Goroutine͸ෳ਺Thread্ʹଟॏԽ͞ΕͨCoroutineͷΑ͏ͳಈ࡞Λ͢Δɻ Ұͭͷgoroutine͕௕͍࣌ؒϒϩοΫ͢Α͏ͳؔ਺Ͱ΋ɺผͷgoroutineʹhand off͠ ͯॲཧΛଓߦ͢ΔͨΊɺCPUΛ༨Βͤͣʹޮ཰తʹϓϩάϥϜΛ࣮ߦͰ͖Δ G1 G2 G3 G4 G5 sleep(1) G6 G4 G5 sleep(1) G6 G8 G4 G7 G9 thread1 thread2 thread3

Slide 54

Slide 54 text

Channel Gorotuine͸ThreadؒΛ·͍ͨͰ࣮ߦ͞ΕΔͨΊɺGoroutineಉ࢜ͰҰͭͷม਺΁ΞΫ ηε͢ΔͱRace Condition͕ൃੜͯ͠͠·͏ɻ ͦΕΛ๷͙ͨΊʹɺGoͰ͸Channelͱ͍͏ػೳ͕ఏڙ͞Ε͓ͯΓɺͦΕΛ࢖ͬͯ஋ Λૹड৴͢Δ G1 G2 G3 send send send main thread receive Channel

Slide 55

Slide 55 text

ProrsumͰ͸ɺgoɺchannelɺselectͳͲΛSwiftʹҠ২ (ͨͩ͠ɺProrosumͷgo͸ϢʔβʔϥϯυͷίϯςΩετεΠον͸ͳ͍)

Slide 56

Slide 56 text

SwiftͰ΋goɺchannelɺselectΛ

Slide 57

Slide 57 text

HTTPαʔόʔ΋Node.jsͷΑ͏ʹΧδϡΞϧʹ࢖͑·͢

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

ProrsumͷαʔόʔΞʔΩςΫνϟ DispatchSource + DispatchQueueΛ࢖ͬͨ Πϕϯτۦಈ + WorkerThreadͷϋΠϒϦοτϞσϧ main thread DispatchSourceͰɺ listeningSocketΛ؂ࢹ Queue Queue Queue Queue Queue Queue Queue Queue Queue client DispatchQueue(concurrent) nonblocking I/O blocking I/O

Slide 60

Slide 60 text

Benchmarking Request/sec 0 17500 35000 52500 70000 Prorsum Kitura Go 1.7 HTTP Server Express 14,769 64,768 17,144 29,436 ɾwrk -d 30s -t 4 -c 20 ɾResponded with the 10 length of random JSON array ɾMachine: MacOS Sierra, 8 logical cores, 8GB RAM

Slide 61

Slide 61 text

͜ͷHTTPαʔόʔΛࠓճͷΞϓϦέʔγϣϯαʔόʔͱͯ͠ Քಇͤ͞ɺಈతͳHTMLͷ഑৴΍ɺgrpc <-> http1.1ͷϓϩΩγ αʔόͱͯ͠ར༻͠·͢ɻ

Slide 62

Slide 62 text

https://speakerdeck.com/noppoman/swiftnishi-sitasabaakitekutiyawozai- kao-siteshi-zhuang-madesitemiru TSSS meetup #5ࢿྉ https://medium.com/@yukitakei/rethink-appropriate-server-architecture-for- swift-7c8513944db8#.ds9jhnmk8 Medium Article ͞Βʹৄ͘͠஌Γ͍ͨํ͸….

Slide 63

Slide 63 text

ProrsumΛ࢖͏͜ͱͰɺओཁͳωοτϫʔΫػೳͷ΄͔ ΑΓ؆୯ʹඇಉظ/ฒྻϓϩάϥϛϯά͕ՄೳʹͳΓ·͢ɻ

Slide 64

Slide 64 text

࣍ʹɺσʔλϕʔεૢ࡞΍ɺ ϚΠάϨʔγϣϯ͸Ͳ͏͠·͠ΐ͏

Slide 65

Slide 65 text

• Swift੡ͷMysqlυϥΠό͸ԿΛ࢖ͬͨΒ͍͍ͷ͔ • Ͱ͖Ε͹Migration·Ͱαϙʔτͯ͠΄͍͠ • ϕλͰSQLΛॻ͘΋ͷ͸ϝϯς͕ޙʑେม • DispatchQueue͸ॏ͍ΫΤϦͩͱthread͕ϒϩοΫ ͞ΕΔͨΊɺඇಉظI/O͕࢖͑Δͱخ͍͠έʔε΋

Slide 66

Slide 66 text

͢΂ͯͷཁ݅ʹ͋ͯ͸·ΔυϥΠό͸͋Γ·ͤΜͰͨ͠ (´ʀωʀʆ)

Slide 67

Slide 67 text

ͳͷͰɺ࡞Γ·ͨ͠ʢসʣ

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

SwiftKenxͱ͸ • Pure Swift Mysql Client + Query Builder • libmysqlclientʹґଘ͠ͳ͍ • TCPϨΠϠʔ͸Prorsum • εΩʔϚϚΠάϨʔγϣϯػೳΛαϙʔτ • SwiftݴޠͰදݱྗͷߴ͍SQL͕ॻ͚Δ • ܕηʔϑͳfetchɺinsert • ඇಉظI/OɺଟॏԽͷαϙʔτʢ͜Ε͔Βʣ

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

No content

Slide 74

Slide 74 text

No content

Slide 75

Slide 75 text

Migration

Slide 76

Slide 76 text

MigrationΫϥε

Slide 77

Slide 77 text

migration࣮ߦϑΝΠϧ(Migration/main.swift)

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

αʔϏε։ൃΛ͠ͳ͕ΒඞཁͳػೳΛॱ࣍଍͍͖ͯ͠·͢

Slide 81

Slide 81 text

͞Βʹৄ͘͠͸ɺnoppoMan/SwiftKnex

Slide 82

Slide 82 text

࠷ޙʹ

Slide 83

Slide 83 text

No content

Slide 84

Slide 84 text

appleެࣜͷαʔόʔAPIϓϩδΣΫτ͕࢝ಈ͍ͯ͠·͢

Slide 85

Slide 85 text

• RFC 7230-7235(HTTP/1.1) • RFC 6455 (WebSocket) • RFC 7540(HTTP/2.0) • TCP/IP(v6,v4), UDP including I/O • TLS/Encryption ର৅͸ҎԼ

Slide 86

Slide 86 text

ެࣜAPI͕ग़ͨλΠϛϯάͰɺ ๻ΒͷαʔϏε΋ஞ࣍Ҡ২Λߦ͏ͭ΋ΓͰ͢ɻ

Slide 87

Slide 87 text

͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠