How to serve gRPC and gRPC-web on single port?

116 Views Asked by At

I have a multi-platform app that uses gRPC for front-back end communication.

Long story long: App usage scenario

          backend             transport        various clients

[             gRPC(Server) ] -- gRPC -- [ flutter app + bloc + gRPC ] 
[ gRPC + Postgres backend  ]
[    gRPC-web(HttpServer?) ] -- gRPCw -- [ flutter web + bloc + gRPC-web ]

All connections happen on the same port.

  • application works fine, uses defined services and interacts with database
  • I do get http connection data on backend separately, so no issues on transfer part

The question is: How to consume that grpc-web connection on server side? I got to the point of

 final webServer = await HttpServer.bind(
    '0.0.0.0',
    rpcPort,
    shared: true,
  );
  print(' gRPC-web port ${webServer.port}');

  await for (HttpRequest request in webServer) {

    print(request);
  }

it gets connection(Instance of '_HttpRequest'), but how do I "feed" it to services?

update 1: gRPC server code, I'm looking for similar with gRPC-web

final server = Server.create(
    services: [
      SiteMethodsService(databaseCore),
      CategoryMethodsService(databaseCore)
    ],
    interceptors: [],
    codecRegistry: CodecRegistry(codecs: const [GzipCodec(), IdentityCodec()]),
  );
0

There are 0 best solutions below