gRPC لـ Swift (iOS/macOS): المكتبات، الإعداد والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

gRPC لـ Swift (iOS/macOS): المكتبات والأمثلة

\n

gRPC هو إطار عمل عالي الأداء للاستدعاء عن بُعد للإجراءات (RPC)، طورته Google. يستخدم Protocol Buffers (protobuf) لتسلسل البيانات و HTTP/2 للنقل. لمنصات Apple (iOS، macOS)، توجد بيئة رسمية Swift gRPC تتيح إنشاء تطبيقات عميل وخادم مع دعم كامل للإمكانيات الحديثة لـ Swift، بما في ذلك async/await.

\n\n

المكتبات والأدوات الرئيسية

\n

للعمل مع gRPC في Swift، تُستخدم المكونات التالية:

\n
    \n
  • gRPC-Swift — الحزمة الرسمية من Google. تتضمن وقت التشغيل، ومولد الكود، ودعم التفاعل بين العميل والخادم.
  • \n
  • Swift Protobuf — مكتبة للعمل مع رسائل protobuf. ضرورية لتوليد هياكل Swift من ملفات .proto.
  • \n
  • protoc — مترجم Protocol Buffers. لتوليد كود Swift، يلزم المكون الإضافي protoc-gen-grpc-swift و protoc-gen-swift.
  • \n
  • Swift Package Manager (SPM) — الطريقة الأساسية لدمج التبعيات.
  • \n
\n\n

التثبيت والإعداد

\n

للبدء، أضف التبعيات في Package.swift:

\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

كما يجب تثبيت protoc والمكونات الإضافية عبر Homebrew:

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

مثال لملف .proto

\n

لننشئ خدمة بسيطة للترحيب. الملف 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

قم بتوليد كود Swift باستخدام الأمر:

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

ستظهر الملفات hello.pb.swift و hello.grpc.swift كنتيجة.

\n\n

جزء الخادم بلغة Swift

\n

لننشئ خادم gRPC يعالج طلبات SayHello:

\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 = "مرحباً، \\(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("الخادم يعمل على localhost:50051")\ntry server.onClose.wait()
\n\n

جزء العميل بلغة Swift (مع async/await)

\n

بالنسبة لعميل iOS/macOS، من المناسب تنفيذه باستخدام async/await. تأكد من استخدام Swift 5.5+ والهدف الأدنى للنشر iOS 13.0 / macOS 10.15.

\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\                    

توصيات