2016-01-28 15 views
44

Vogliamo creare un gui Javascript/HTML per i nostri microservizi gRPC. Dal momento che gRPC non è supportato dal browser, abbiamo pensato di utilizzare i web-socket per connettersi a un server node.js, che chiama il servizio di destinazione tramite grpc. Abbiamo difficoltà a trovare una soluzione elegante per farlo. Soprattutto, dal momento che usiamo i flussi gRPC per spingere gli eventi tra i nostri micro-servizi. Sembra che abbiamo bisogno di un secondo sistema RPC, solo per comunicare tra il front-end e il server node.js. Questo sembra essere un sacco di overhead e codice aggiuntivo che deve essere mantenuto.Come portare un'API definita da gRPC al browser web

Qualcuno ha esperienza di fare qualcosa del genere o ha un'idea di come questo potrebbe essere risolto?

risposta

15

Purtroppo, non c'è ancora una buona risposta per voi.

Il supporto di streaming RPC dal browser richiede completamente i rimorchi HTTP2 supportati dai browser e, al momento della scrittura di questa risposta, non lo sono.

Vedere this issue per la discussione sull'argomento.

In caso contrario, è necessario un sistema di traduzione completo tra WebSockets e gRPC. Forse ottenere ispirazione da grpc-gateway potrebbe essere l'inizio di un progetto del genere, ma è ancora una ripresa molto lunga.

+0

Grazie per la risposta! Ho già letto sul problema con i rimorchi http. C'è anche una patch che qualcuno ha fatto in modo che sia possibile usare grpc nel browser senza la funzione di streaming. Il progetto grpc-gateway è un utile suggerimento. Probabilmente stiamo facendo un gateway con dnode ora ... – Oliver

+1

Sì, se ti dimentichi dello streaming, allora grpc dal browser è totalmente possibile. –

+0

@NicolasNoble - è grandioso. Esiste un esempio di una chiamata gRPC non streaming da un browser? –

1

GRPC Bus Il proxy WebSocket esegue esattamente questo tramite il proxy di tutte le chiamate GRPC tramite una connessione WebSocket per fornire all'utente qualcosa di simile all'API GRPC del nodo nel browser. A differenza di GRPC-Gateway, funziona sia con richieste di streaming che con risposte di streaming, oltre a chiamate non di streaming.

C'è un server e un componente client. Il GRPC Bus WebSocket Proxy server può essere eseguito con Docker facendo docker run gabrielgrant/grpc-bus-websocket-proxy

Sul lato del browser, è necessario installare il GRPC Bus WebSocket Proxy client con npm install grpc-bus-websocket-client

e quindi si crea un nuovo oggetto GBC con: new GBC(<grpc-bus-websocket-proxy address>, <protofile-url>, <service map>)

Per esempio :

var GBC = require("grpc-bus-websocket-client"); 

new GBC("ws://localhost:8080/", 'helloworld.proto', {helloworld: {Greeter: 'localhost:50051'}}) 
    .connect() 
    .then(function(gbc) { 
    gbc.services.helloworld.Greeter.sayHello({name: 'Gabriel'}, function(err, res){ 
     console.log(res); 
    }); // --> Hello Gabriel 
    }); 

la biblioteca cliente si aspetta di essere in grado di scaricare il file con una .proto Richiesta AJAX. Lo service-map fornisce gli URL dei diversi servizi definiti nel file proto come visualizzato dal server proxy.

Per maggiori dettagli, vedere la GRPC Bus WebSocket Proxy client README

10

Recentemente abbiamo costruito gRPC-Web (https://github.com/improbable-eng/grpc-web) - un client browser e server di fascia che segue la proposta di protocollo gRPC-Web. L'esempio in quel repository dovrebbe fornire un buon punto di partenza.

Richiede un proxy autonomo o un wrapper per il server gRPC se si utilizza Golang. Il proxy/wrapper modifica la risposta per impacchettare i rimorchi nel corpo della risposta in modo che possano essere letti dal browser.

Disclosure: Sono un manutentore del progetto.

+1

sarebbe ora la possibilità di creare una pagina di gioco HTML per qualsiasi proto file simile a quello fatto per swagger. In questo modo qualsiasi servizio gRPC può essere testato facilmente tramite il browser. – Setheron

0

Guardando le soluzioni attuali con gRPC oltre web, ecco ciò che è disponibile là fuori al momento della stesura di questo (e quello che ho trovato):

voglio anche collegare senza vergogna la mia soluzione, che ho scritto per la mia azienda ed è essere utilizzati nella produzione di richieste proxy ad un servizio gRPC che include solo le chiamate unari e Streaming Server:

Ogni pollice del codice è coperto da test. È un middleware Express, quindi non ha bisogno di ulteriori modifiche alla configurazione di gRPC. È inoltre possibile delegare l'autenticazione HTTP a Express (ad esempio con Passport).

Problemi correlati