xref: /aosp_15_r20/external/grpc-grpc/examples/cpp/compression/README.md (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker# gRPC C++ Message Compression Tutorial
2*cc02d7e2SAndroid Build Coastguard Worker
3*cc02d7e2SAndroid Build Coastguard Worker### Prerequisite
4*cc02d7e2SAndroid Build Coastguard WorkerMake sure you have run the [hello world example](../helloworld) or understood the basics of gRPC. We will not dive into the details that have been discussed in the hello world example.
5*cc02d7e2SAndroid Build Coastguard Worker
6*cc02d7e2SAndroid Build Coastguard Worker### Get the tutorial source code
7*cc02d7e2SAndroid Build Coastguard Worker
8*cc02d7e2SAndroid Build Coastguard WorkerThe example code for this and our other examples lives in the `examples` directory. Clone this repository at the [latest stable release tag](https://github.com/grpc/grpc/releases) to your local machine  by running the following command:
9*cc02d7e2SAndroid Build Coastguard Worker
10*cc02d7e2SAndroid Build Coastguard Worker
11*cc02d7e2SAndroid Build Coastguard Worker```sh
12*cc02d7e2SAndroid Build Coastguard Worker$ git clone -b RELEASE_TAG_HERE https://github.com/grpc/grpc
13*cc02d7e2SAndroid Build Coastguard Worker```
14*cc02d7e2SAndroid Build Coastguard Worker
15*cc02d7e2SAndroid Build Coastguard WorkerChange your current directory to examples/cpp/compression
16*cc02d7e2SAndroid Build Coastguard Worker
17*cc02d7e2SAndroid Build Coastguard Worker```sh
18*cc02d7e2SAndroid Build Coastguard Worker$ cd examples/cpp/compression/
19*cc02d7e2SAndroid Build Coastguard Worker```
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard Worker### Generating gRPC code
22*cc02d7e2SAndroid Build Coastguard Worker
23*cc02d7e2SAndroid Build Coastguard WorkerTo generate the client and server side interfaces:
24*cc02d7e2SAndroid Build Coastguard Worker
25*cc02d7e2SAndroid Build Coastguard Worker```sh
26*cc02d7e2SAndroid Build Coastguard Worker$ make helloworld.grpc.pb.cc helloworld.pb.cc
27*cc02d7e2SAndroid Build Coastguard Worker```
28*cc02d7e2SAndroid Build Coastguard WorkerWhich internally invokes the proto-compiler as:
29*cc02d7e2SAndroid Build Coastguard Worker
30*cc02d7e2SAndroid Build Coastguard Worker```sh
31*cc02d7e2SAndroid Build Coastguard Worker$ protoc -I ../../protos/ --grpc_out=. --plugin=protoc-gen-grpc=grpc_cpp_plugin ../../protos/helloworld.proto
32*cc02d7e2SAndroid Build Coastguard Worker$ protoc -I ../../protos/ --cpp_out=. ../../protos/helloworld.proto
33*cc02d7e2SAndroid Build Coastguard Worker```
34*cc02d7e2SAndroid Build Coastguard Worker
35*cc02d7e2SAndroid Build Coastguard Worker### Writing a client and a server
36*cc02d7e2SAndroid Build Coastguard Worker
37*cc02d7e2SAndroid Build Coastguard WorkerThe client and the server can be based on the hello world example.
38*cc02d7e2SAndroid Build Coastguard Worker
39*cc02d7e2SAndroid Build Coastguard WorkerAdditionally, we can configure the compression settings.
40*cc02d7e2SAndroid Build Coastguard Worker
41*cc02d7e2SAndroid Build Coastguard WorkerIn the client, set the default compression algorithm of the channel via the channel arg.
42*cc02d7e2SAndroid Build Coastguard Worker
43*cc02d7e2SAndroid Build Coastguard Worker```cpp
44*cc02d7e2SAndroid Build Coastguard Worker  ChannelArguments args;
45*cc02d7e2SAndroid Build Coastguard Worker  // Set the default compression algorithm for the channel.
46*cc02d7e2SAndroid Build Coastguard Worker  args.SetCompressionAlgorithm(GRPC_COMPRESS_GZIP);
47*cc02d7e2SAndroid Build Coastguard Worker  GreeterClient greeter(grpc::CreateCustomChannel(
48*cc02d7e2SAndroid Build Coastguard Worker      "localhost:50051", grpc::InsecureChannelCredentials(), args));
49*cc02d7e2SAndroid Build Coastguard Worker```
50*cc02d7e2SAndroid Build Coastguard Worker
51*cc02d7e2SAndroid Build Coastguard WorkerEach call's compression configuration can be overwritten by client context.
52*cc02d7e2SAndroid Build Coastguard Worker
53*cc02d7e2SAndroid Build Coastguard Worker```cpp
54*cc02d7e2SAndroid Build Coastguard Worker    // Overwrite the call's compression algorithm to DEFLATE.
55*cc02d7e2SAndroid Build Coastguard Worker    context.set_compression_algorithm(GRPC_COMPRESS_DEFLATE);
56*cc02d7e2SAndroid Build Coastguard Worker```
57*cc02d7e2SAndroid Build Coastguard Worker
58*cc02d7e2SAndroid Build Coastguard WorkerIn the server, set the default compression algorithm via the server builder.
59*cc02d7e2SAndroid Build Coastguard Worker
60*cc02d7e2SAndroid Build Coastguard Worker```cpp
61*cc02d7e2SAndroid Build Coastguard Worker  ServerBuilder builder;
62*cc02d7e2SAndroid Build Coastguard Worker  // Set the default compression algorithm for the server.
63*cc02d7e2SAndroid Build Coastguard Worker  builder.SetDefaultCompressionAlgorithm(GRPC_COMPRESS_GZIP);
64*cc02d7e2SAndroid Build Coastguard Worker```
65*cc02d7e2SAndroid Build Coastguard Worker
66*cc02d7e2SAndroid Build Coastguard WorkerEach call's compression configuration can be overwritten by server context.
67*cc02d7e2SAndroid Build Coastguard Worker
68*cc02d7e2SAndroid Build Coastguard Worker```cpp
69*cc02d7e2SAndroid Build Coastguard Worker    // Overwrite the call's compression algorithm to DEFLATE.
70*cc02d7e2SAndroid Build Coastguard Worker    context->set_compression_algorithm(GRPC_COMPRESS_DEFLATE);
71*cc02d7e2SAndroid Build Coastguard Worker```
72*cc02d7e2SAndroid Build Coastguard Worker
73*cc02d7e2SAndroid Build Coastguard WorkerFor a working example, refer to [greeter_client.cc](greeter_client.cc) and [greeter_server.cc](greeter_server.cc).
74*cc02d7e2SAndroid Build Coastguard Worker
75*cc02d7e2SAndroid Build Coastguard WorkerBuild and run the (compressing) client and the server by the following commands.
76*cc02d7e2SAndroid Build Coastguard Worker
77*cc02d7e2SAndroid Build Coastguard Worker```sh
78*cc02d7e2SAndroid Build Coastguard Workermake
79*cc02d7e2SAndroid Build Coastguard Worker./greeter_server
80*cc02d7e2SAndroid Build Coastguard Worker```
81*cc02d7e2SAndroid Build Coastguard Worker
82*cc02d7e2SAndroid Build Coastguard Worker```sh
83*cc02d7e2SAndroid Build Coastguard Worker./greeter_client
84*cc02d7e2SAndroid Build Coastguard Worker```
85