如何在C语言中编写gRPC客户端/服务器?

8
我有一个用C语言编写的程序,想要在其中包含gRPC。然而,gRPC的API是用C++编写的。
我已经在这里找到了foo_client和foo_server,并使它们正常工作。 https://github.com/Juniper/grpc-c/tree/master/examples 然而,C客户端与我的gRPC C++服务器不兼容。它们无法相互通信。我认为这是因为我正在使用最新版本的gRPC,它使用protocbuf 3.2.0版本。而Juniper的grpc-c使用旧版本的gRPC,该版本使用protocbuf 3.0.0。
所以,C中的Juniper版本似乎无法与新的gRPC配合使用。我知道gRPC低级C API应该在这里: https://github.com/grpc/grpc/blob/master/include/grpc/grpc.h 但我在实现它时遇到了困难。有人可以帮助我理解吗?
我已经有一段时间没有用C编程了,所以我有点生疏。
2个回答

5

你知道有C++实现的C封装器的任何代码示例吗? - Manohar
@Manohar extern C {},请参见https://dev59.com/LWsz5IYBdhLWcg3wv6ju? - Franck
3
2022年有更简洁的方法吗? - lmonninger

0
有几种方法可以解决这个问题:
从你的C代码中调用gRPC的CPP函数:为此,创建一个C API来公开你的C++代码的功能。编写带有extern "C"标记的C++函数,并设计一个纯C API来封装C++库。更多细节请参考这里:如何从C调用C++函数?和这里:混合C和Cpp
使用非官方的C gRPC库:我在几个不同的地方看到过juniper-grpc-c (Github)的提及。
使用一个HTTP/2 C库:gRPC是基于HTTP2构建的,所以使用类似https://nghttp2.org/的库,你可以为gRPC拥有C绑定。
使用Apache Thrift:Thrift是一个轻量级的、与语言无关的软件堆栈,用于点对点RPC实现,它有一个C客户端。如果可以替换gRPC,你可以尝试一下这个。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接