Slide 1

Slide 1 text

H31$GPS"OESPJE !XBTBCFFG@KQ

Slide 2

Slide 2 text

"CPVU.F @wasabeef_jp CyberAgent, Inc.

Slide 3

Slide 3 text

8IBUJTH31$

Slide 4

Slide 4 text

)551

Slide 5

Slide 5 text

)551 • Binary • Multiplexed • Server Push • Header compression

Slide 6

Slide 6 text

-BOHVBHFT

Slide 7

Slide 7 text

-BOHVBHFT • C/C++ • C# • Java • Go • Objective-c • Node.js • PHP • Python • Ruby

Slide 8

Slide 8 text

8IBUJT 1SPUPDPM#VFST

Slide 9

Slide 9 text

1SPUPDPM#VFST • IDL • Binary • Support code generation (protoc)

Slide 10

Slide 10 text

VTFSKTPO { id: 1, name: “wasabeef”, createdAt: “20150808” }

Slide 11

Slide 11 text

VTFSQSPUP syntax = "proto3"; package user; message Profile { string id = 1; string name = 2; int64 createdAt = 3; }

Slide 12

Slide 12 text

QSPUPCVG

Slide 13

Slide 13 text

*OTUBMM # git clone git@github.com:google/protobuf.git # cd protobuf # git checkout v3.0.0-alpha-3.1 # ./autogen.sh # ./configure # make # make check # sudo make install

Slide 14

Slide 14 text

*OTUBMM # protoc --version libprotoc 3.0.0

Slide 15

Slide 15 text

3FUSPU

Slide 16

Slide 16 text

$POWFSUFS

Slide 17

Slide 17 text

$POWFSUFST • GSON • Jackson • Moshi • Protobuf • Simplexml • Wire

Slide 18

Slide 18 text

1SPUP$POWFSUFS Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.example.com") .converter(new ProtoConverter()) .build();

Slide 19

Slide 19 text

0UIFST • Wire (Square) • FlatBuffers (Google) • Message Pack (Sadayuki Furuhashi)

Slide 20

Slide 20 text

6TFH31$

Slide 21

Slide 21 text

FDIPQSPUP syntax = "proto3"; option java_package = “jp.wasabeef.proto.echo”; option go_package = "echo"; package echo; message EchoRequest { string message = 1; } message EchoReply { string message = 1; } service Echo { rpc Echo (EchoRequest) returns (EchoReply) {} }

Slide 22

Slide 22 text

$PEFHFOFSBUJPO • protobuf-gradle-plugin • (protoc) • (protoc-gen-grpc-java)

Slide 23

Slide 23 text

HSQDKBWB

Slide 24

Slide 24 text

%FQFOEFODJFT compile 'io.grpc:grpc-all:x.y.z'

Slide 25

Slide 25 text

TBNQMF AsyncSubject subject = AsyncSubject.create(); new Thread(() -> { Channel channel = OkHttpChannelBuilder.forAddress(“grpc.wasabeef.jp”, 8443)
 .setConnectionSpec(ConnectionSpec.MODERN_TLS)
 .sslSocketFactory((SSLSocketFactory)SSLSocketFactory.getDefault())
 .build();
 
 EchoGrpc.EchoBlockingStub stub = EchoGrpc.newBlockingStub(channel); 
 Echo.EchoRequest req = new Echo.EchoRequest();
 req.setMessage(“YES YES YES!"); 
 Echo.EchoReply reply = stub.echo(req);
 subject.onNext(reply.getMessage());
 subject.onCompleted();
 }).start();
 
 subject.observeOn(AndroidSchedulers.mainThread()).subscribe(msg -> {
 Log.d(“ECHO LOG” ,msg);
 });

Slide 26

Slide 26 text

HSQDDPNNPO

Slide 27

Slide 27 text

%PDVNFOUT https://github.com/grpc/grpc-common

Slide 28

Slide 28 text

UIBOLT