狠狠撸

狠狠撸Share a Scribd company logo
驳搁笔颁入门
KenjiroKubota #社内勉強会
あじぇんだ
1. 驳搁笔颁とは
2. Protocol Buffersとは
3. 辫谤辞迟辞肠を利用してコード生成
4. Goで使ってみよう
5. PHPで使ってみよう
驳搁笔颁とは
gRPC
● RPC(Remote Procedure Call)を実現するためのプロトコルの一つ
● Googleが開発
● ProtocolBuffersを利用して高速かつ低容量での通信を実現
● C++, Java, Python, Go, Ruby, C#, Node.js, PHP… さまざな言語に
対応
● gRPCの「g」はバージョン毎に意味が異なる
https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md
https://grpc.io/docs/guides/
驳搁笔颁の通信方式
UnaryRPC(SimpleRPC)
https://qiita.com/yuzo777/items/046910c95559cf0fff68
シンプルな1リクエスト1レスポンス
ServerStreamingRPC
https://qiita.com/yuzo777/items/046910c95559cf0fff68
1リクエストNレスポンス
サーバープッシュなど
ClientStreamingRPC
https://qiita.com/yuzo777/items/046910c95559cf0fff68
Nリクエスト1レスポンス
データアップロードなど
BidirectionalStreamingRPC
https://qiita.com/yuzo777/items/046910c95559cf0fff68
NリクエストNレスポンス
チャットなど
Protocol Buffersとは
Protocol Buffers
● 言語やプラットフォームに依存しない、構造化されたデータをシリア
ライズする拡張可能なメカニズム。XMLやJSONのようなインター
フェイス記述言語(IDL)。似たようなものにAvroやThriftがある。
● .protoという拡張子のファイルで定義
● 現在の主流はバージョン3
● protobufと略されることが多い
● protocというツールを利用して各言語のコードを生成する
https://dejanstojanovic.net/aspnet/2018/june/how-to-boost-application-performance-by-choosing-the-right-serialization/
https://dejanstojanovic.net/aspnet/2018/june/how-to-boost-application-performance-by-choosing-the-right-serialization/
辫谤辞迟辞ファイルの书き方
驳搁笔颁入门
宣言しないと辫谤辞迟辞2と解釈される
メッセージ型
フィールド?型指定が可能
タグナンバー
バイナリ変換時にフィールドを区別する際に利用される。
これは一度採番したら変えるべきではない。変更がある場合は新たに採番する必要がある
コメントもかけるよ
予約タグナンバーやフィールドを指定できる。
過去に使っていたタグナンバーやフィールドを指定しておくと事故らない
reservedフィールドにタグナンバーとフィールド名を混合して記述することはできない
スカラ型対応リスト
https://developers.google.com/protocol-buffers/docs/proto3
ネット見ろ
デフォルト値
string 空文字列
bytes 空バイト列
bool false
数値型 ゼロ
enum 最初に列挙されたもの(必ず0指定である必要がある)
别苍耻尘型例
别苍耻尘型例
proto2との互換性のため、
ゼロスタート
别苍耻尘型例
他のメッセージを含める
他のメッセージを含める
oneof
どちらかの値のみを使うことでメモリを節約する仕組み。
プログラム上は最後にセットした方が有効になる。
map
配列の定義もちゃんとあります
パッケージ
メッセージの名前衝突を避けるためにパッケージで名前空間を分けることができる
サービス定義
メッセージ型をRPCでやり取りする際の定義を行うことができる。
先にあげたUnaryRPCやその他の指定はここで行う。
辫谤辞迟辞肠を利用してコード生成
protoファイルはそのままでは使えません
定義ファイルから対象のプログラミング言語に対応したコードを生成させ
る必要があります。
そこで、protocというコード生成ツールを利用します。
protoc
plugin
導入
● Mac
brew install protobuf
● Windows
DLしてPATH通せばよいっぽい
https://github.com/protocolbuffers/protobuf/releases
用意する辫谤辞迟辞ファイル
骋辞のコードを书き出す
驳搁笔颁入门
辫谤辞迟辞ファイルから骋辞のファイルを生成
辫谤辞迟辞ファイルから骋辞のファイルを生成
protoファイルと同じ階層にgrpcプラグインを利用して書き出し
before after
生成されたファイル???!
笔贬笔コードを书き出す
辫谤辞迟辞ファイルは同じものを利用
笔贬笔のコード生成にはプラグインが必要
辫谤辞迟辞ファイルから笔贬笔のファイルを生成
辫谤辞迟辞ファイルから笔贬笔のファイルを生成
先ほどmakeしたプラグインファイルを指定
驳搁笔颁入门
骋辞で驳搁笔颁サーバーを作る
再掲) protoファイル
驳搁笔颁入门
リクエストを受け付ける
メッセージを取得する
レスポンスを返却する
驳搁笔颁入门
さっき作った
サービスを登録
する。
笔贬笔で驳搁笔颁クライアントを作る
PHPでは拡張モジュールが必要
https://cloud.google.com/php/grpc
ネット見ろ
驳搁笔颁入门
驳搁笔颁入门
驳搁笔颁入门
驳搁笔颁入门
驳搁笔颁入门
驳搁笔颁入门
驳搁笔颁入门
Demo
まとめ
● 思ったよりgRPCは手軽に使える
● 本番投入したことないのでツラミはわからない
● スキーマ変更が大変そう
(新しいメッセージ型にかえてしまえばよいのかな?)
● API定義書が不要
● REST APIのクライアント周り作るより楽、圧倒的に楽
● 認証周りもできるらしい
● だれかサービス担当?権限ある人導入してみて!!!www
thanks;)

More Related Content

驳搁笔颁入门