diff --git a/README.md b/README.md index 61ff9a5e97d817589b3bc165987ee601e8619c88..c7c896db61d5f84c060ff04ead4e3f18397d3aac 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Hello World method. - Create a Go client that accesses the same Java server. - Update the service with more advanced features like RPC streaming. -The complete code for the example is available in [wherever we put it]. You can +The complete code for the example is available in the `grpc-common` GitHub repository. You can work along with the example and hack on the code in the comfort of your own computer, giving you hands-on practice of really writing gRPC code. We use the Git versioning system for source code management: @@ -174,7 +174,7 @@ to generated code. As we're creating Java code, we use the gRPC Java plugin. To build the plugin: -``` +```sh $ pushd external/grpc_java $ make java_plugin $ popd @@ -182,7 +182,7 @@ $ popd To use it to generate the code: -``` +```sh $ mkdir -p src/main/java $ protoc -I . helloworld.proto --plugin=protoc-gen-grpc=external/grpc_java/bins/opt/java_plugin \ @@ -194,27 +194,25 @@ This generates the following classes, which contain all the generated code we ne - [`Helloworld.java`](java/src/main/java/ex/grpc/Helloworld.java), which has all the protocol buffer code to populate, serialize, and retrieve our `HelloRequest` and `HelloReply` message types - [`GreetingsGrpc.java`](java/src/main/java/ex/grpc/GreetingsGrpc.java), which contains (along with some other useful code): - - an interface for `Greetings` servers to implement + - an interface for `Greetings` servers to implement -``` + ```java public static interface Greetings { public void hello(ex.grpc.Helloworld.HelloRequest request, com.google.net.stubby.stub.StreamObserver<ex.grpc.Helloworld.HelloReply> responseObserver); } -``` + ``` - - _stub_ classes that clients can use to talk to a `Greetings` server. + - _stub_ classes that clients can use to talk to a `Greetings` server. -``` + ```java public static class GreetingsStub extends com.google.net.stubby.stub.AbstractStub<GreetingsStub, GreetingsServiceDescriptor> implements Greetings { ... } -``` - -_Does gRPC output multiple Java classes per proto by default?_ + ``` <a name="server"></a> ### Writing a server @@ -233,7 +231,7 @@ Our server application has two classes: implements the behaviour we require of our GreetingService. There are a number of important features of gRPC being used here: -``` +```java public void hello(Helloworld.HelloRequest req, StreamObserver<Helloworld.HelloReply> responseObserver) { Helloworld.HelloReply reply = Helloworld.HelloReply.newBuilder().setMessage( @@ -262,7 +260,7 @@ number of important features of gRPC being used here: other main feature required to provde the gRPC service; how to allow a service implementation to be accessed from the network. -``` +```java private void start() throws Exception { server = NettyServerBuilder.forPort(port) .addService(GreetingsGrpc.bindService(new GreetingsImpl())) @@ -302,7 +300,7 @@ transport handling; its constructor accepts the host name and port of the service. The channel in turn is used to construct the Stub. -``` +```java private final ChannelImpl channel; private final GreetingGrpc.GreetingBlockingStub blockingStub; @@ -324,7 +322,7 @@ It: - prints out the greeting -``` +```java public void greet(String name) { logger.debug("Will try to greet " + name + " ..."); try { @@ -344,7 +342,7 @@ It: The main method puts together the example so that it can be run from a command line. -``` +```java /* Access a service running on the local machine on port 50051 */ HelloClient client = new HelloClient("localhost", 50051); String user = "world"; @@ -379,13 +377,13 @@ $ mvn package We've added simple shell scripts to simplifying running the examples. Now that they are built, you can run the server with: -``` +```sh $ ./run_greetings_server.sh ``` and in another terminal window confirm that it receives a message. -``` +```sh $ ./run_greetings_client.sh ```