首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grpc示例是否打算跨语言使用?

grpc示例是否打算跨语言使用?
EN

Stack Overflow用户
提问于 2015-03-11 07:18:20
回答 1查看 2.8K关注 0票数 4

gRPC示例旨在进行互操作吗?我可以完全用Java运行Java客户端-服务器示例。我完全可以用Go来做例子。但是Go的hello world客户端不会与Java的hello world服务器通信。

在一个终端中,来自grpc-java:

代码语言:javascript
复制
$ ./gradlew :grpc-examples:helloWorldServer
:grpc-core:compileJava UP-TO-DATE
...
:grpc-examples:helloWorldServer
Mar 10, 2015 7:01:50 PM io.grpc.examples.helloworld.HelloWorldServer start
INFO: Server started, listening on 50051
> Building 96% > :grpc-examples:helloWorldServer

在另一个终端中,从grpc-common/go

代码语言:javascript
复制
$ go run greeter_client/main.go
2015/03/10 19:02:47 could not greet: rpc error: code = 12 desc = "Method not found: /helloworld.Greeter/SayHello"
exit status 1

这不是我所期望的跨语言示例。SayHello确实存在,但问题是路径或大小写敏感吗?我是不是遗漏了什么,或者这种跨语言合作的意图还没有实现?

(注意--我不知道Go,我已经被unable to build grpc for C++了)。

EN

回答 1

Stack Overflow用户

发布于 2015-03-11 08:11:01

您正在使用的两个示例基于不兼容的proto定义。问题是java示例使用了包名称grpc.example.helloworld,而go示例只使用了helloworld

并且因为包名是URL路径(/helloworld.Greeter/SayHello)的一部分,所以调用失败( java服务器期望/grpc.example.helloworld.Greeter/SayHello)。

您可以在生成的代码中看到它。

Java:

代码语言:javascript
复制
private GreeterServiceDescriptor() {
  sayHello = createMethodDescriptor(
      "grpc.example.helloworld.Greeter", METHOD_SAY_HELLO);
}

转到:

代码语言:javascript
复制
var _Greeter_serviceDesc = grpc.ServiceDesc{
        ServiceName: "helloworld.Greeter",
        HandlerType: (*GreeterServer)(nil),
        Methods: []grpc.MethodDesc{
            {
                MethodName: "SayHello",
                Handler: _Greeter_SayHello_Handler,
            },
        },
        Streams: []grpc.StreamDesc{},
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28975841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档