Slide 1

Slide 1 text

Network.framework ͷ঺հ omochimetaru @ 1

Slide 2

Slide 2 text

֓ཁ ৽͍͠ωοτϫʔΫϥΠϒϥϦ URLSession, CFSocket, ੜsocket ʹଓ͘ୈ4ͷબ୒ࢶ 2

Slide 3

Slide 3 text

֓ཁ ιέοτϨϕϧͷ௨৴Λѻ͏ϩʔϨΠϠʔͷϥΠϒϥϦ URLSession΋಺෦Ͱ࢖༻͍ͯ͠Δ 3

Slide 4

Slide 4 text

ಛ௃ Swift API, C API ੜιέοτͰ͸໘౗ͳࣄΛඪ४ఏڙ DispatchQueueϕʔεͷඇಉظAPI ϞόΠϧωοτϫʔΫΛҙࣝͨ͠ઃܭ 4

Slide 5

Slide 5 text

ੜιέοτͰ͸໘౗ͳࣄΛඪ४ఏڙ IPv4, IPv6 TCP, UDP ඇಉظͳDNS໊લղܾ TLSαϙʔτ ࠷ॳʹࢦఆ͢Ε͹ޙ͸Ұॹ 5

Slide 6

Slide 6 text

DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ઀ଓઌͱϓϩτίϧͷࢦఆ init(host: NWEndpoint.Host, port: NWEndpoint.Port, using: NWParameters) // ઀ଓ, ੾அίʔϧόοΫ var stateUpdateHandler: ((NWConnection.State) -> Void)? // ઀ଓ func start(queue: DispatchQueue) } 6

Slide 7

Slide 7 text

DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ૹ৴ func send(content: Data?, contentContext: NWConnection.ContentContext, isComplete: Bool, completion: NWConnection.SendCompletion) enum SendCompletion { case contentProcessed(@escaping (NWError?) -> Void) case idempotent } } 7

Slide 8

Slide 8 text

DispatchQueueϕʔεͷඇಉظAPI class NWConnection { // ड৴ func receive( minimumIncompleteLength: Int, maximumLength: Int, completion: @escaping (Data?, NWConnection.ContentContext?, /* isCompleted */ Bool, NWError?) -> Void) } 8

Slide 9

Slide 9 text

DispatchQueueϕʔεͷඇಉظAPI class NWListener { // ଴ͪड͚ࢦఆ init?(parameters: NWParameters, port: NWEndpoint.Port) // ઀ଓϋϯυϥ var newConnectionHandler: ((NWConnection) -> Void)? func start(queue: DispatchQueue) } 9

Slide 10

Slide 10 text

ϞόΠϧωοτϫʔΫΛҙࣝͨ͠ઃܭ ϞόΠϧͰ͸4GͱWifiΛ௫ΜͩΓ཭ͨ͠Γ͢Δ NWConnection.start() ͷࡍɺ ճઢ͕1ͭ΋ແͯ͘΋ .failed ʹ͸ͳΒͳ͍ɻ .waiting ʹͳΓ଴ػ͢Δɻ ճઢΛ௫Ί͹઀ଓࢼߦ͢Δɻ 10

Slide 11

Slide 11 text

ϞόΠϧωοτϫʔΫΛҙࣝͨ͠ઃܭ class NWConnection { // ΑΓྑ͍ܦ࿏ͷ௨஌ var betterPathUpdateHandler: ((Bool) -> Void)? // ݱࡏͷܦ࿏Λ੾அɺผͷܦ࿏Λࢪߦ func cancelCurrentEndpoint() } ※͜ͷϖʔδͷ಺༰͸ௐ͕ࠪ؁͍Ͱ͢ɻ 11

Slide 12

Slide 12 text

ࢿྉ • ϦϑΝϨϯε Network https://developer.apple.com/documentation/network • WWDC2018ͷಈը Introducing Network.framework: A modern alternative to Sockets https://developer.apple.com/videos/play/wwdc2018/715/ 12

Slide 13

Slide 13 text

ࢿྉ • netcatͷ࣮૷αϯϓϧ, Cݴޠ Implementing netcat with Network Framework https://developer.apple.com/documentation/network/ implementingnetcatwithnetworkframework • ιʔείʔυίϝϯτ swift/stdlib/public/SDK/Network https://github.com/apple/swift/tree/master/stdlib/public/ SDK/Network 13

Slide 14

Slide 14 text

HTTPϥΠϒϥϦΛ࡞ͬͨ omochi/ForceHTTP https://github.com/omochi/ForceHTTP ATSͷ੍ݶΛड͚ͳ͍ 14

Slide 15

Slide 15 text

σϞ omochi/ForceHTTPExample https://github.com/omochi/ForceHTTPExample 15