gRPCコールを達成するためのiOSアプリケーション:技術研究(A)を忘れないでください

問題

モバイルアプリケーションの開発では、通常、サーバー上の複雑なビジネスロジックを達成すると、クライアントは、プレゼンテーション層のための唯一の責任です。しかし、いくつかの携帯電話アプリケーションのための、ビジネス・ロジックは、サーバー上にありますが、安全ではないか無理があるが、それは、電話論理エンドで直接に実現する必要があります。

目的

フェイス異なるモバイル・クライアント・システムで、別のは、同じビジネスロジックではなく、ベストプラクティスを実現するために繰り返します。ゴー言語のビジネスロジックは、ライブラリにカプセル化されたサードパーティ製の言語、および異なるシステムを使用するモバイルクライアントを提供するために、静的なパックされた道を形成する方法、それはこの調査の目的です。

理想的なゴールグラフ:

gRPCコールを達成するためのiOSアプリケーション:技術研究(A)を忘れないでください

具体的な研究内容は以下のとおりです。

gRPCについてのiOSとAndroidを達成するもので、それ自体は公式にはサンプルを提供してきました。調査では、関連するコンテンツを使用しますので、それを読むために、後のものを容易にするための研究の一環として記録されます。研究プロジェクトのコードに関わるすべてのに格納されています。liujianping / GRPC-アプリの倉庫、困っている友達は、直接テストでダウンロードすることができます。

:私の個人的なサイトのオリジナルリリースでGitDiG.comの説明リンク:. gRPCコールを達成するためのiOSアプリケーション

1.インストール環境

パートタイムとしてのiOSプログラマは、多くの場合、不慣れな技術や言語を研究する必要があります。最初は、未知の心理的な恐怖を克服することです。実際には、それほど難しいことではない、物事の多くは、ちょうどそれを起動する必要があります。研究目的を完了するためには、研究活動の最初の部分が始まりました。新規参入を容易にするため、書面で記録されます。

1.1 XCodeのインストール

直接AppStoreのは、ダウンロードしてインストール、何も言うことはありません。他の環境を準備ダウンロード中に、少し遅いです。

1.2 Cocoapodインストール

他の言語、サードパーティ製のデータベース管理ツールのように。私は言う、公式ウェブサイトを訪問、インストールするための指示に従うことは何もありません。

$: sudo gem install cocoapods

1.3 protocは、インストールするコマンド

なぜなら普及gRPCの、いるProtobufバイトプロトコルが広く、特定のガイドラインを参照して、符号化及び復号化のプロトコルのために使用される[公式サイト]()。いくつかの単語の男は、インストールを言いました:

$: curl -LOk https://github.com/protocolbuffers/protobuf/releases/download/v3.5.1/protoc-3.9.0-rc-1-osx-x86_64.zip
$: unzip protoc-3.9.0-rc-1-osx-x86_64.zip -d proto_buffer && cd proto_buffer
$: sudo cp bin/protoc /usr/local/bin
$: sudo cp -R include/google/protobuf/ /usr/local/include/google/protobuf
$: protoc --version

1.4 protocプラグインのインストール

protoc主に解析することによって.proto、ファイル形式とは、特定のウィジェットに応じて対応する言語コードを生成します。
アカウントにコードのクライアントとサーバを実装する必要性を取るので、あなたは、以下の3つのプラグインをインストールする必要があります。

  • 迅速
  • swiftgrpc
  • サービス側を実装するために主に生成されたコードを行く行きます

迅速なプラグインをインストール:

$: git clone https://github.com/grpc/grpc-swift.git
$: cd grpc-swift
$: git checkout tags/0.5.1
$: make
$: sudo cp protoc-gen-swift protoc-gen-swiftgrpc /usr/local/bin

プラグインがインストールされて行きます。

公式ウェブサイトを参照して、囲碁言語開発環境をインストールする必要があることを条件とします。protoc-gen-go詳細なインストールガイド

$: go get -u github.com/golang/protobuf/protoc-gen-go

2プロト定義されたインタフェース

それが最も簡単なのHelloサービスの利用に関する最も簡単な研究があるので。プロジェクトを作成し、パスを定義します。

$: mkdir grpc-apps
$: cd grpc-apps
$: mkdir proto
$: cat <<EOF > proto/hello.proto
syntax = "proto3";

option java_multiple_files = true;
option java_package = "com.gitdig.helloworld";
option java_outer_classname = "HelloWorldProto";

package helloworld;

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
EOF

3.サービス側の実装

プロジェクトディレクトリとプロトビルドディレクトリにサーバーのディレクトリを作成し、簡単なサーバを書きます:

$: cd grpc-apps
$: mkdir go go/client go/server go/hello
# 生成 Go 代码到 go/hello 文件夹
$: protoc -I proto proto/hello.proto --go_out=plugins=grpc:./go/hello/

クライアントとサーバーの実装の両方のバージョンを編集してください。サービスが正常に動作していることを確認します。

3.1ゴー・サーバ

編集しserver/server.goたファイルを:

package main

import (
    pb "github.com/liujianping/grpc-apps/go/helloworld"
)

import (
    "context"
    "fmt"
    "log"
    "net"

    "google.golang.org/grpc"
)

type HelloServer struct{}

// SayHello says 'hi' to the user.
func (hs *HelloServer) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
    // create response
    res := &pb.HelloReply{
        Message: fmt.Sprintf("hello %s from go", req.Name),
    }

    return res, nil
}

func main() {
    var err error

    // create socket listener
    l, err := net.Listen("tcp", ":50051")
    if err != nil {
        log.Fatalf("error: %v\n", err)
    }

    // create server
    helloServer := &HelloServer{}

    // register server with grpc
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, helloServer)

    log.Println("server serving at: :50051")
    // run
    s.Serve(l)
}

サーバープログラムを実行します。

$: cd grpc-apps/go
$: go run server/server.go
2019/07/03 20:31:06 server serving at: :50051

3.2囲碁クライアント

編集しclient/client.goたファイルを:

package main

import (
    pb "github.com/liujianping/grpc-apps/go/helloworld"
)

import (
    "context"
    "fmt"
    "log"

    "google.golang.org/grpc"
)

func main() {
    var err error

    // connect to server
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("error: %v\n", err)
    }
    defer conn.Close()

    // create client
    client := pb.NewGreeterClient(conn)

    // create request
    req := &pb.HelloRequest{Name: "JayL"}

    // call method
    res, err := client.SayHello(context.Background(), req)
    if err != nil {
        log.Fatalf("error: %v\n", err)
    }

    // handle response
    fmt.Printf("Received: \"%s\"\n", res.Message)
}

クライアントプログラムを実行します。

$: cd grpc-apps/go
$: go run client/client.go
Received: "hello JayL from go"

クライアント/サーバ間の通信が成功した移動します。

4. iOSのプロジェクト

4.1単純な単一のビューのプロジェクトを作成します

iosDemo単一のビューと呼ばれるプロジェクトを作成し、迅速な言語を選択し、上のストレージ・パスgrpc-appsの次。あなたは、作成、実行が終了したら、プログラムを終了します。

4.2プロジェクトの初期ポッド

コマンドラインの初期化中:

$: cd grpc-apps/iosDemo
# 初始化
$: pod init
$: vim Podfile

編集Podfile次のように:

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'iosDemo' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for iosDemo
  pod 'SwiftGRPC'
end

あなたが編集、保存が完了したら、インストールのコマンドを実行します。

$: pod install

インストールが完了したら、プロジェクトディレクトリには、以下の変更を行われます。

$: git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   iosDemo.xcodeproj/project.pbxproj

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Podfile
    Podfile.lock
    Pods/
    iosDemo.xcworkspace/

no changes added to commit (use "git add" and/or "git commit -a")

コマンドラインopen iosDemo.xcworkspaceプロジェクトを開くには、プロジェクト内の以下の設定を変更することがinfo.list:

gRPCコールを達成するためのiOSアプリケーション:技術研究(A)を忘れないでください

設定することで、非セキュアHTTPアクセスを開きます。

4.3コード生成gRPC SWIFT

同様に、コード生成を行く、今SWIFTは、コードを生成します。

$: cd grpc-apps
# 创建生成文件存放目录
$: mkdir swift
# 生成 swift 文件
$: protoc -I proto proto/hello.proto \
    --swift_out=./swift/ \
    --swiftgrpc_out=Client=true,Server=false:./swift/
# 生成文件查看
$: tree swift
swift
├── hello.grpc.swift
└── hello.pb.swift

4.4は、iOSプロジェクトに統合されたコードを生成し、

XCodeのは、バックエンドの開発のための道をドラッグして追加するために必要なコードを生成し、それは少し無理が​​あります。しかし、これ以来、私たちはルールに従わなければなりません。

今gRPCは、iOS用のビューの読み込み機能でプロシージャを呼び出す追加します。

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let client = Helloworld_GreeterServiceClient(address: ":50051", secure: false)
        var req = Helloworld_HelloRequest()
        req.name = "JayL"
        do {
            let resp = try client.sayHello(req)
            print("resp: \(resp.message)")
        } catch {
            print("error: \(error.localizedDescription)")
        }
    }
}

ログ出力を表示しresp: hello iOS from go、成功したiOSアプリケーションはgRPCサービスを呼び出します。

おすすめ

転載: blog.51cto.com/14435426/2417584