Oli*_*ver 71 javascript protocol-buffers node.js microservices grpc
我们想为我们的gRPC微服务构建一个Javascript/HTML gui.由于浏览器端不支持gRPC,我们考虑使用web-socket连接到node.js服务器,该服务器通过grpc调用目标服务.我们很难找到一个优雅的解决方案来做到这一点.特别是,因为我们使用gRPC流来推动我们的微服务之间的事件.似乎我们需要第二个RPC系统,只是为了在前端和node.js服务器之间进行通信.这似乎是很多开销和必须维护的额外代码.
有没有人有这方面的经验,或者知道如何解决这个问题?
Mar*_*cus 33
编辑:自2018年10月23日以来,gRPC-Web项目是GA,这可能是解决您问题的最官方/标准化方式.(即使现在已经2018年......;))
来自GA-Blog:"gRPC-Web,就像gRPC一样,允许您使用Protocol Buffers在客户端(Web)和后端gRPC服务之间定义服务"契约".然后可以自动生成客户端.[...]"
我们最近构建了gRPC-Web(https://github.com/improbable-eng/grpc-web) - 一个遵循建议的gRPC-Web协议的浏览器客户端和服务器包装器.该回购中的例子应该提供一个良好的起点.
如果您使用Golang,它需要一个独立的代理或gRPC服务器的包装器.代理/包装器修改响应以将响应主体中的预告片打包,以便浏览器可以读取它们.
披露:我是该项目的维护者.
Nic*_*ble 16
不幸的是,你还没有任何好的答案.
完全支持来自浏览器的流式RPC需要浏览器支持HTTP2预告片,并且在撰写此答案时,它们不是.
否则,是的,您需要WebSockets和gRPC之间的完整翻译系统.也许从grpc-gateway获得灵感可能是这个项目的开始,但这仍然是一个很长的镜头.
Cod*_*Ray 10
官方grpc-web(beta)实施于2008年3月23日发布.你可以找到它
以下说明来自自述文件:
service EchoService {
rpc Echo(EchoRequest) returns (EchoResponse);
rpc ServerStreamingEcho(ServerStreamingEchoRequest)
returns (stream ServerStreamingEchoResponse);
}
Run Code Online (Sandbox Code Playgroud)
var echoService = new proto.grpc.gateway.testing.EchoServiceClient(
'http://localhost:8080');
Run Code Online (Sandbox Code Playgroud)
var unaryRequest = new proto.grpc.gateway.testing.EchoRequest();
unaryRequest.setMessage(msg);
echoService.echo(unaryRequest, {},
function(err, response) {
console.log(response.getMessage());
});
Run Code Online (Sandbox Code Playgroud)
var stream = echoService.serverStreamingEcho(streamRequest, {});
stream.on('data', function(response) {
console.log(response.getMessage());
});
Run Code Online (Sandbox Code Playgroud)
这是一项正在进行中的工作以及grpc-web路线图.虽然有一个示例protobuf显示bidi流,但这个评论清楚地表明这个例子实际上还没有工作.
希望这会很快改变.:)
https://github.com/grpc/上的grpc人员正在构建一个js 实现.
repro位于https://github.com/grpc/grpc-web(给出404 - >),这是当前(2016-12-20)的早期访问,因此您需要请求访问权限.
归档时间: |
|
查看次数: |
32303 次 |
最近记录: |