gpt4 book ai didi

java - grpc 示例是否旨在跨语言交流?

转载 作者:IT王子 更新时间:2023-10-29 01:06:42 26 4
gpt4 key购买 nike

gRPC 示例是否旨在互操作?我可以完全使用 Java 运行 Java 客户端-服务器示例。我可以完全使用 Go 编写 Go 示例。但是 Go 的 hello world 客户端不会与 Java 的 hello world 服务器对话。

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

$ ./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

$ 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 有了,但是是路径问题还是区分大小写问题?我是否遗漏了什么,或者这种跨语言合作的意图尚未实现?

(警告——我不懂围棋,而且我一直在 unable to build grpc for C++ )。

最佳答案

您使用的两个示例基于不兼容的原型(prototype)定义。问题在于 java 示例使用的是包名称 grpc.example.helloworld 而 go 示例仅使用 helloworld

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

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

Java:

private GreeterServiceDescriptor() {
sayHello = createMethodDescriptor(
"grpc.example.helloworld.Greeter", METHOD_SAY_HELLO);
}

开始:

var _Greeter_serviceDesc = grpc.ServiceDesc{
ServiceName: "helloworld.Greeter",
HandlerType: (*GreeterServer)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "SayHello",
Handler: _Greeter_SayHello_Handler,
},
},
Streams: []grpc.StreamDesc{},
}

关于java - grpc 示例是否旨在跨语言交流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28975841/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com