使用thrift进行RPC通信(附c程序示例)

这篇具有很好参考价值的文章主要介绍了使用thrift进行RPC通信(附c程序示例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

为了实现不同语言的程序跨进程、跨主机通信,一般可以采用mq或rpc框架来实现。
对于异步通知的场景可以使用mq,如zeroMQ。
使用thrift进行RPC通信(附c程序示例)

但对于某些实时性较强且同步的应用场景,使用成熟的rpc框架来实现也是一种比较更好的选择。

开源的rpc框架有很多,其中跨语言的rpc框架以使用google公司采用protobuf协议的grpc框架,和facebook公司的thrift框架最为知名。
使用thrift进行RPC通信(附c程序示例)
使用thrift进行RPC通信(附c程序示例)

thrift与grpc对比

关于这两个框架详细信息的对比文章有许多,此处省略5000字……

这里仅从语言支持度来进行对比一下:

grpc thrift
C#、NET、C++、Dart、Go、Java、Kotlin、Node、Objective-C、PHP、Python、Ruby C (glib)、C++、C#、Cocoa、Common LISP、D、Dart、.NET、Erlang、Haxe、Go、Java、JavaScript、Lua、Node.js、OCaml、Perl、PHP、Python、Ruby、Rust、Smalltalk、Swift

从支持的语言方面来看,thrift官方支持的语言类型则更丰富一些。

如需要C程序和其他语言进行通信,则可以更加倾向于使用thrift框架。(尽管grpc官方没有对c的支持,但实际使用中有对应的解决方案,网上相关的资料也较多。以go版本的onos为例,可以在它的onos-e2-sm项目中看到c与go程序的调用示例代码。)

本文中主要介绍c程序使用thrift的主要步骤。

thrift使用步骤

thrift的使用步骤一般分为以下3个步骤:

  1. 定义thrift接口描述文件
  2. 生成对应语言的接口代码
  3. 将生成的代码整合到项目中
    使用thrift进行RPC通信(附c程序示例)
    整体来看还是比较简单的,官方示例也比较多。

thrift-c程序环境安装

需要特殊说明的是,由于c程序和go、java程序相比由于没有包管理器,且处于系统的较底层,安装方式上看也稍微复杂一些。
使用前需要先将thrift的c依赖包在系统中进行安装,否则可能无法编译。
具体安装方式也可支持参考thrift官网的安装说明:
centos下安装thrift
ubuntu下安装thrift

这里以centos为例,主要的操作步骤如下:

基础依赖安装

yum install autoconf automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel

glib安装,以支持生成及编译thrift的c依赖库

yum install glib*

下载thrift源码

git clone --branch 0.18.1 https://github.com/apache/thrift.git

开始准备编译依赖库

#切换到thrift源码根目录
cd thrift
#生成配置文件
./bootstrap.sh
#执行配置
./configure --prefix=/usr/local/

./configure阶段会输出支持的thrift语言,片段如下:

thrift 0.18.1

Building C (GLib) Library .... : yes
Building C++ Library ......... : no
Building Common Lisp Library.. : no
Building D Library ........... : no
Building Dart Library ........ : no
Building .NET Standard Library : no
Building Erlang Library ...... : no
Building Go Library .......... : yes
Building Haxe Library ........ : no
Building Java Library ........ : no
Building Kotlin Library ...... : no
Building Lua Library ......... : no
Building NodeJS Library ...... : no
Building Perl Library ........ : no
Building PHP Library ......... : no
Building Python Library ...... : yes
Building Py3 Library ......... : no
Building Ruby Library ........ : no
Building Rust Library ........ : no
Building Swift Library ....... : no

如果要编译的语言右边显示为no,则说明当前系统缺少对应的依赖项,将无法完成所选语言依赖库的安装。
以C (Glib)Library为例如果显示为no,则可能是缺少glib依赖,需要先在系统中安装好glib后再执行。

如果想要不安装某个语言的库,可以在configure后面跟上 –without-[语言] 屏蔽某语言库的安装。
如要屏蔽perl、nodejs、cpp的依赖库,则命令如下:

./configure --prefix=/usr/local/ --without-perl --without-nodejs --without-cpp

执行make编译thrift及依赖库

sudo make
sudo make install

thrift的编译过程较长,稍等个几分钟左右就能编译好了。

示例程序运行

在编译完thrift的源码后,如果没有报错会在thrift的 /tutorial/c_glib下将demo的client和server程序编译出来,生成tutorial_clienttutorial_server可执行文件。

可以先后执行tutorial_servertutorial_client进行验证:
使用thrift进行RPC通信(附c程序示例)
从图片上可以看到,demo示例程序通信成功啦~

常见错误解决办法

如果在编译成功后,运行程序时出现以下报错

thrift: error while loading shared libraries: libthriftc.so.0: cannot open shared object file: No such file or directory

可通过如命令解决,以确保 /etc/ld.so.conf文件中有 /usr/local/lib的配置文章来源地址https://www.toymoban.com/news/detail-448528.html

root@ubuntu:/home/phy/thrift# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

root@ubuntu:/home/phy/thrift# echo "/usr/local/lib" >> /etc/ld.so.conf
root@ubuntu:/home/phy/thrift# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

/usr/local/lib
root@ubuntu:/home/phy/thrift# ldconfig

到了这里,关于使用thrift进行RPC通信(附c程序示例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 西门子S7-1200使用LRCF通信库与安川机器人进行EthernetIP通信的具体方法示例

    准备条件: PLC:S7-1200 1214C DC/DC/DC 系统版本4.5及以上。 机器人控制柜:安川YRC1000。 软件:TIA V17 PLC做主站,机器人做从站。 具体方法可参考以下内容: 使用的库文件为西门子 1200系列 PLC 与机器人通过 EtherNet/IP 协议通信时的参数配置功能块。 机器人侧Ethernet/IP设定 机器人开

    2024年02月03日
    浏览(103)
  • Apache Thrift C++库的TThreadPoolServer模式的完整示例

    1) 要有完整的request  和 response; 2) 支持多进程并行处理任务; 3)子进程任务结束后无僵尸进程 见 步步详解:Apache Thrift C++库从编译到工作模式DEMO_北雨南萍的博客-CSDN博客 数据字段定义: cat Datainfo.thrift # Datainfo.thrift struct message   {     1:i32 seqId,     2:string content   }     

    2024年02月14日
    浏览(28)
  • 基于.net6的WPF程序使用SignalR进行通信

    之前写的SignalR通信,是基于.net6api,BS和CS进行通信的。 .net6API使用SignalR+vue3聊天+WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信,后台服务使用.net6api 。其实和之前写的差不多,主要在于服务端以后台进程的方式存在,而客户端以exe方式存在,

    2024年02月16日
    浏览(49)
  • RPC分布式网络通信框架(一)—— protobuf的使用

    常见序列化和反序列化协议有XML、JSON、protobuf,相比于其他protobuf更有优势: 1、protobuf是二进制存储的,xml和json都是文本存储的。故protobuf占用带宽较低 2、protobuf不需要存储额外的信息。 json如何存储数据?键值对。例:Name:”zhang san”, pwd: “12345”。 protobuf存储数据的方式

    2024年02月16日
    浏览(52)
  • 西门子S7-1500与FANUC机器人进行EtherNetIP通信的具体方法示例

    具体方法可参考以下内容: 以下示例中TIA博途的版本为V17,本例中PLC做主站,机器人做从站 一、 西门子PLC一侧的组态设置和编程 首先,我们需要到下载所需的EtherNetIP通信库文件,大家可自行百度获取或者从以下链接获取: 西门子EtherNetIP Scanner通信库文件V17版本 打开博途软

    2024年02月09日
    浏览(148)
  • FANUC机器人将位置数据通过组信号与PLC进行通信的具体方法示例

    下面通过Ethernet/IP通信为例进行说明:

    2024年02月12日
    浏览(83)
  • 实现跨语言通信的便捷之道:RPC在Java和Go中的使用案例

    导语: 在现代软件开发中,构建分布式系统和跨语言通信变得越来越常见。RPC(远程过程调用)作为一种通信协议,提供了一种简单而高效的方式来实现不同语言之间的通信。本文将探讨RPC的使用案例,并展示如何在Java和Go之间实现跨语言通信。 什么是RPC? RPC是一种允许不

    2024年01月19日
    浏览(43)
  • 香农公式--通信的浅显理解--单纯只是为了弄懂功率和信道容量的关系

    笔记的目标:简单梳理功率和信道容量的关系 其中主要是为了弄明白论文《Spectrum Sharing in Vehicular Networks Based on Multi-Agent Reinforcement Learning》中的应用场景问题,即功率(信道增益)与信道容量的关系 对于应用场景和其他公式的分析见我的此篇文章 香农第二定理:信息传输率

    2024年02月06日
    浏览(47)
  • 【Go语言】基于Socket编程的P2P通信程序示例

    Go语言的Socket编程实现为开发者提供了一种高效且强大的方式来实现网络通信。通过Go语言的并发模型和内置的网络库,如 net 包,开发者可以轻松地创建基于套接字的通信应用。Go语言的goroutine和channel机制使并发处理变得简单,能够轻松处理多个连接和数据交换。使用Go语言

    2024年02月11日
    浏览(50)
  • FANUC机器人通过KAREL程序实现与PLC位置坐标通信的具体方法示例

    在通信IO点位数量足够的情况下,可以使用机器人的IO点传输位置数据,这里以传输机器人的实时位置为例进行说明。 基本流程如下图所示 : 基本步骤可参考如下: 首先确认机器人控制柜已经安装了总线通信软件(例如:PROFINET),相应的IO端口通信配置已经完成,已经配置

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包