thrift c,thrift编译

  thrift c,thrift编译

  节俭用日记_CUDev-ChinaUnix博客

  节俭的小贴士

  标签:

  客户

  港口

  脸谱网

  运输

  草案

  分类:编程

  Thrift是一个跨语言的服务部署框架,最初由脸书在2007年开发,2008年进入Apache开源项目。Thrift通过一种中间语言(IDL)定义RPC的接口和数据类型,然后通过一个编译器生成不同语言(目前支持C、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C #、Cocoa、Smalltalk和OCaml)的代码,生成的代码负责RPC协议层和传输层的实现。Thrift实际上实现了C/S模式,通过代码生成工具将接口定义文件生成为服务器端和客户端代码(可以是不同语言),从而实现服务器端和客户端的跨语言支持。用户在第三个描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户就可以实现服务了(客户端调用服务,服务器调用服务)。其中protocol(协议层,定义数据传输格式,如二进制或XML)和transport(传输层,定义数据传输方式,如TCP/IP传输、内存共享或文件共享)作为运行时库。基本概念

  节俭中的几个概念:

  服务器服务模型

  处理器数据处理接口

  处理器数据处理对象

  协议数据传输协议

  传输数据传输模式处理程序是一个抽象接口,需要在编译后的代码中自行实现。处理器调用Handler中的代码,并自动编译,所以不用担心。(1)支持的传输格式

  tbinaryprotocol二进制格式。

  tcompactprotocol压缩格式

  TJSON协议JSON格式

  TSImpleJSON协议——提供JSON只写协议,生成的文件可以很容易的用脚本语言解析。

  tdebugprotocol使用易于理解和阅读的文本格式来方便调试。

  (2)支持的数据传输方法

  TFileTransport:一个文件(日志)传输类,允许客户端向服务器传输文件,并允许服务器将接收到的数据写入文件。

  THttpTransport:数据传输采用Http传输协议。

  TSocket: TCP Socket用于数据传输。

  TZlibTransport:压缩并传输数据,或者解压缩接收到的数据。

  下面的类主要是修饰上面的类(使用decorator模式)来提高传输效率。

  TBufferedTransport:缓冲传输对象操作的数据,即从缓冲区读取数据进行传输,或者直接将数据写入缓冲区。

  TFramedTransport:用于帧传输的非阻塞服务。类似于TBufferedTransport,也会缓冲相关数据,同时支持定长数据发送和接收。

  TMemoryBuffer:从支持缓冲区(3)的服务模型中读取和写入数据

  TsimpleServer——一个简单的单线程服务模型,通常用于测试。

  tthreaddserver——多线程服务模型,使用阻塞IO,为每个请求创建一个线程。

  tthreadpoolserver线程池服务模型,它使用标准的阻塞IO创建一组线程来预先处理请求。

  TnBlockingServer多线程服务模型。如果使用非阻塞IO(需要TFramedTransport数据传输模式)处理大量更新,主要在TThreadedServer和TnBlockingServer之间选择。TNonblockingServer可以用少量线程处理大量并发连接,但延迟较高;TThreadedServer具有低延迟。实际上tthreaddserver的吞吐量可能比TNonblockingServer高,但是tthreaddserver的CPU消耗比TNonblockingServer高很多。安装安装使用节俭需要注意安装一些库的实现。

  Thrift的C编译器在boost中使用shared_ptr。如果需要配合C使用,需要先安装boost。

  如果希望使用非阻塞服务器,需要安装libevent。使用thrift时,首先定义一个idl文件(接口描述语言),然后使用thrift编译相应的代码。节俭-GencppXYZ。Thrift我们需要记住的是:Thrift帮助您生成给定服务的服务器端和客户端代码。Thrift这里的命名规则是针对服务XYZ的,其对应的服务器端代码(具体是这个服务的执行)是在XYZHandler类中,客户端代码(负责marshall,执行RPC)是在XYZClient类中。所以你需要使用这个服务,你只需要直接修改或者继承这些类。服务器编写的一般步骤:

  1.创建处理程序

  2.基于处理程序创建处理器

  3.创建运输

  4.创建协议模式

  5.基于处理器、传输和协议创建服务器

  6.运行服务器客户端的一般步骤:

  1.创建运输

  2.创建协议模式

  3.基于传输和协议创建客户端

  4.当您运行客户端方法来创建传输时,通常需要创建相应的套接字。代码附有周末写的测试代码,leveldb用thrift封装成网络服务。它包含各种服务模型。在kv.rar的注意事项。Thrift生成的服务器端是线程安全的。但是客户端不是线程安全的。因此,如果多个线程需要与服务器端通信,每个线程都需要启动自己的一个客户端实例。2.如果服务器使用TNonblockingServer,客户端必须使用TFramedTransport。链接程序时需要Thriftnb。

  3.默认情况下,TServerSocket和TSocket都将NoDelay设置为1,这样消息可以尽快发送出去。如果客户端和服务器之间有大量的数据传输,可以通过设置NoDelay为0来启动Nagel算法,在发送之前缓存一段数据,从而减少消息的数量。

  TSocket默认打开Linger,并将linger time设置为0,这样close就会丢弃Socket发送缓冲区中的数据,并向对等体发送RST消息。close不会被阻塞,会立即返回。

  TServerSocket默认关闭Linger,close不会被阻塞,它会立即返回。

  4.fb303作为handler的基类,里面预置了一些rpc方法用于监控,包括系统状态、请求次数等状态信息。

  thrift文件中需要包含“fb303.thrift ”,以便将服务导入目标thrift文件。thrift编译的代码只需要相应的处理程序就可以继承facebook:fb303:FacebookBase。类scribeHandler:虚拟公共scribe:thrift:scribeIf,

  脸书:FB 303:脸书基地{5。您可以使用ZeroMQ和其他工具作为传输工具进行通信。

  可以参考thrift-0.7.0/contrib/zeromq中的代码。[未测试]

  https://issues.apache.org/jira/browse/THRIFT-812

  6.thrift支持完全异步,这需要在生成代码时使用

  节俭一代cpp:cob_style xxx.thrift

  这种情况下,生成的代码需要TEventServer.h,但它不存在于async目录中,只有TEvhttpServer.h

  3359github.com/klickverbot/thrift/commit/5dABB8E3F63A 15874 e 436 c 9 a 650 DC 17 f 7 DD 7028 # diff-2【注意】async有些问题,需要用T Event Server.h编译自动生成的代码(0.7.0和svn trunk都可以),,,contrib/async里有http异步测试代码,大致看了一下它的实现,用std:tr1:function和std:tr1:bind实现了处理器的异步处理,并增加了TAsyncProcessor。当它的流程函数返回时,真正的逻辑可能还没有完成。对于服务器端,响应主要发送到客户端。同步RPC服务的TProcessor就可以了。只有像代理这样的中间服务需要异步处理,但是目前在thrift中只有TEvhttpServer可用。-)参考

  http://dongxicheng.org/search-engine/thrift-framework-intro/

  http://dongxicheng.org/search-engine/thrift-guide/

  http://donxi cheng . org/search-engine/thrift-RPC/http://diwakergupta . github . com/thrift-missing-guide/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: