gRPC für Swift (iOS/macOS): Bibliotheken, Einrichtung und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

gRPC für Swift (iOS/macOS): Bibliotheken und Beispiele

\n

gRPC ist ein von Google entwickeltes Hochleistungs-Framework für entfernte Prozeduraufrufe (RPC). Es verwendet Protocol Buffers (protobuf) zur Datenserialisierung und HTTP/2 als Transportprotokoll. Für Apple-Plattformen (iOS, macOS) gibt es das offizielle Ökosystem Swift gRPC, mit dem sowohl Client- als auch Serveranwendungen mit vollständiger Unterstützung moderner Swift-Funktionen, einschließlich async/await, erstellt werden können.

\n\n

Wichtige Bibliotheken und Werkzeuge

\n

Für die Arbeit mit gRPC in Swift werden die folgenden Komponenten verwendet:

\n
    \n
  • gRPC-Swift — das offizielle Paket von Google. Es enthält Laufzeitumgebung, Codegenerator und Unterstützung für die Client-Server-Kommunikation.
  • \n
  • Swift Protobuf — eine Bibliothek für die Arbeit mit protobuf-Nachrichten. Notwendig zur Generierung von Swift-Strukturen aus .proto-Dateien.
  • \n
  • protoc — der Protocol Buffers-Compiler. Für die Generierung von Swift-Code werden die Plugins protoc-gen-grpc-swift und protoc-gen-swift benötigt.
  • \n
  • Swift Package Manager (SPM) — die primäre Methode zur Integration von Abhängigkeiten.
  • \n
\n\n

Installation und Einrichtung

\n

Fügen Sie zu Beginn die Abhängigkeiten in Package.swift hinzu:

\n
// swift-tools-version:5.9\nimport PackageDescription\n\nlet package = Package(\n    name: "GRPCExample",\n    dependencies: [\n        .package(url: "https://github.com/grpc/grpc-swift.git", from: "1.21.0"),\n        .package(url: "https://github.com/apple/swift-protobuf.git", from: "1.26.0")\n    ],\n    targets: [\n        .executableTarget(\n            name: "GRPCExample",\n            dependencies: [\n                .product(name: "GRPC", package: "grpc-swift"),\n                .product(name: "SwiftProtobuf", package: "swift-protobuf")\n            ]\n        )\n    ]\n)
\n\n

Außerdem müssen protoc und die Plugins über Homebrew installiert werden:

\n
brew install protobuf\nbrew install grpc-swift\nbrew install swift-protobuf
\n\n

Beispiel einer .proto-Datei

\n

Erstellen wir einen einfachen Dienst zur Begrüßung. Datei hello.proto:

\n
syntax = "proto3";\n\nservice Greeter {\n    rpc SayHello (HelloRequest) returns (HelloReply);\n}\n\nmessage HelloRequest {\n    string name = 1;\n}\n\nmessage HelloReply {\n    string message = 1;\n}
\n\n

Generieren Sie den Swift-Code mit dem Befehl:

\n
protoc --swift_out=. --grpc-swift_out=. hello.proto
\n\n

Als Ergebnis erscheinen die Dateien hello.pb.swift und hello.grpc.swift.

\n\n

Serverseite in Swift

\n

Erstellen wir einen gRPC-Server, der SayHello-Anfragen verarbeitet:

\n
import GRPC\nimport NIO\nimport NIOPosix\n\nclass GreeterProvider: GreeterProvider {\n    func sayHello(request: HelloRequest, context: StatusOnlyCallContext) -> EventLoopFuture<HelloReply> {\n        var reply = HelloReply()\n        reply.message = "Hallo, \\(request.name)!"\n        return context.eventLoop.makeSucceededFuture(reply)\n    }\n}\n\nlet group = MultiThreadedEventLoopGroup(numberOfThreads: 1)\ndefer { try! group.syncShutdownGracefully() }\n\nlet server = try Server.insecure(group: group)\n    .withServiceProviders([GreeterProvider()])\n    .bind(host: "localhost", port: 50051)\n    .wait()\n\nprint("Server gestartet auf localhost:50051")\ntry server.onClose.wait()
\n\n

Clientseite in Swift (mit async/await)

\n

Für iOS/macOS lässt sich der Client bequem mit async/await implementieren. Stellen Sie sicher, dass Sie Swift 5.5+ und als Mindestziel iOS 13.0 / macOS 10.15 verwenden.

\n
import GRPC\nimport NIO\nimport NIOPosix\nimport SwiftProtobuf\n\nfunc greet(name: String) async throws -> String {\n    let group = PlatformSupport.makeEventLoopGroup(loopCount: 1)\n    defer { try? group.syncShutdownGracefully() }\n\                    

Empfehlungen