How to bring a gRPC defined API to the web browser

前端 未结 8 755
孤街浪徒
孤街浪徒 2021-01-29 22:39

We want to build a Javascript/HTML gui for our gRPC-microservices. Since gRPC is not supported on the browser side, we thought of using web-sockets to connect to a node.js serve

8条回答
  •  醉梦人生
    2021-01-29 23:39

    An official grpc-web (beta) implementation was released on 3/23/2018. You can find it at

    https://github.com/grpc/grpc-web

    The following instructions are taken from the README:

    Define your gRPC service:

    service EchoService {
      rpc Echo(EchoRequest) returns (EchoResponse);
    
      rpc ServerStreamingEcho(ServerStreamingEchoRequest)
          returns (stream ServerStreamingEchoResponse);
    }
    

    Build the server in whatever language you want.

    Create your JS client to make calls from the browser:

    var echoService = new proto.grpc.gateway.testing.EchoServiceClient(
      'http://localhost:8080');
    

    Make a unary RPC call

    var unaryRequest = new proto.grpc.gateway.testing.EchoRequest();
    unaryRequest.setMessage(msg);
    echoService.echo(unaryRequest, {},
      function(err, response) {
        console.log(response.getMessage());
      });
    

    Streams from the server to the browser are supported:

    var stream = echoService.serverStreamingEcho(streamRequest, {});
    stream.on('data', function(response) {
      console.log(response.getMessage());
    });
    

    Bidirectional streams are NOT supported:

    This is a work in progress and on the grpc-web roadmap. While there is an example protobuf showing bidi streaming, this comment make it clear that this example doesn't actually work yet.

    Hopefully this will change soon. :)

提交回复
热议问题