`

thrift实现php调用C++接口

阅读更多
一、About  thrift  
二、什么是thrift,怎么工作?
三、Thrift  IDL
四、Thrift   Demo
五、Thrift 协议栈 以及各层的使用(java 为例)
六、与protocolbuffer的区别

一、About  thrift  
         thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。thrift是facebook开发的,我们现在把它作为开源软件使用。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言(来自百度百科)。   
  >>>最初由facebook开发用做系统内个语言之间的RPC通信 。
  >>>2007年由facebook贡献到apache基金 ,现在是apache下的opensource之一 。
  >>>支持多种语言之间的RPC方式的通信:php语言client可以构造一个对象,调用相应的服务方法来调用java语言的服务 ,跨越语言的C/S   rpc  调用 。


二、什么是thrift,怎么工作?

java  rmi的例子,代码见附件,建立一个java rmi的流程  :
  >>>定义一个服务调用接口 。
  >>>server端:接口实现---impl的实例---注册该服务实现(端口)---启动服务。
  >>>client端:通过ip、端口、服务名,得到服务,通过接口来调用 。
  >>>rmi数据传输方式:java对象序列化 。

Thrift  服务 
  >>>例同rmi ,需要定义通信接口、实现、注册服务、绑定端口……
  >>>如何多种语言之间通信  ?
  >>>数据传输走socket(多种语言均支持),数据再以特定的格式(String ),发送,接收方语言解析   。
        Object --->  String --->  Object  。

    问题:编码、解析完全需要自己做 ,复杂的数据结构会编码困难 .


Thrift  服务 :thrift的中间编码层
  >>>java  Object ---> Thrift  Object ---> php  Object  
  >>> 定义thrift的文件 ,由thrift文件(IDL)生成 双方语言的接口、model ,在生成的model以及接口中会有解码编码的代码 。
  >>>thrift   文件例子
     thrift-0.7.0.exe   -r   -gen  java    TestThrift.thrift    生成java 代码
     thrift-0.7.0.exe   -r   -gen  php    TestThrift.thrift    生成php代码
     thrift-0.7.0.exe   -r   -gen  py       TestThrift.thrift    生成python代码
     thrift-0.7.0.exe   -r   -gen  as3     TestThrift.thrift    生成as3代码
     thrift-0.7.0.exe   -r   -gen  cpp     TestThrift.thrift    生成C++代码

三、Thrift  IDL
                
       http://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167669.html

       http://wiki.apache.org/thrift/
          
       http://wiki.apache.org/thrift/ThriftTypes

四、Thrift   Demo
Thrift  IDL 文件
Java代码 复制代码 收藏代码
  1. namespace java com.gemantic.analyse.thrift.index  
  2.   
  3. struct  NewsModel{  
  4. 1:i32 id ;  
  5. 2:string title;  
  6. 3:string content;  
  7. 4:string media_from;  
  8. 5:string author;  
  9. }  
  10.   
  11. service IndexNewsOperatorServices {  
  12. bool indexNews(1:NewsModel indexNews),  
  13. bool deleteArtificiallyNews(1:i32 id )  
  14. }  
namespace java com.gemantic.analyse.thrift.index

struct  NewsModel{
1:i32 id ;
2:string title;
3:string content;
4:string media_from;
5:string author;
}

service IndexNewsOperatorServices {
bool indexNews(1:NewsModel indexNews),
bool deleteArtificiallyNews(1:i32 id )
}


java  server
Java代码 复制代码 收藏代码
  1. package com.gemantic.analyse.thrift.index;  
  2.   
  3. import java.net.InetSocketAddress;  
  4.   
  5. import org.apache.thrift.protocol.TBinaryProtocol;  
  6. import org.apache.thrift.server.TServer;  
  7. import org.apache.thrift.server.TThreadPoolServer;  
  8. import org.apache.thrift.server.TThreadPoolServer.Args;  
  9. import org.apache.thrift.transport.TServerSocket;  
  10. import org.apache.thrift.transport.TServerTransport;  
  11. import org.apache.thrift.transport.TTransportFactory;  
  12.   
  13. public class ThriftServerTest {  
  14.   
  15.     /** 
  16.      * @param args 
  17.      */  
  18.     public static void main(String[] args) {  
  19.         // TODO Auto-generated method stub  
  20.         IndexNewsOperatorServices.Processor processor = new IndexNewsOperatorServices.Processor(new IndexNewsOperatorServicesImpl());  
  21.         try{  
  22.             TServerTransport serverTransport = new TServerSocket( new InetSocketAddress("0.0.0.0",9813));  
  23.             Args trArgs=new Args(serverTransport);  
  24.             trArgs.processor(processor);  
  25.             //使用二进制来编码应用层的数据  
  26.             trArgs.protocolFactory(new TBinaryProtocol.Factory(truetrue));  
  27.             //使用普通的socket来传输数据  
  28.             trArgs.transportFactory(new TTransportFactory());  
  29.             TServer server = new TThreadPoolServer(trArgs);  
  30.             System.out.println("server begin ......................");  
  31.             server.serve();  
  32.             System.out.println("---------------------------------------");  
  33.             server.stop();  
  34.         }catch(Exception e){  
  35.             throw new RuntimeException("index thrift server start failed!!"+"/n"+e.getMessage());  
  36.         }  
  37.     }  
  38.   
  39. }  
package com.gemantic.analyse.thrift.index;

import java.net.InetSocketAddress;

import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.server.TThreadPoolServer.Args;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportFactory;

public class ThriftServerTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IndexNewsOperatorServices.Processor processor = new IndexNewsOperatorServices.Processor(new IndexNewsOperatorServicesImpl());
		try{
			TServerTransport serverTransport = new TServerSocket( new InetSocketAddress("0.0.0.0",9813));
			Args trArgs=new Args(serverTransport);
			trArgs.processor(processor);
			//使用二进制来编码应用层的数据
			trArgs.protocolFactory(new TBinaryProtocol.Factory(true, true));
			//使用普通的socket来传输数据
			trArgs.transportFactory(new TTransportFactory());
			TServer server = new TThreadPoolServer(trArgs);
			System.out.println("server begin ......................");
			server.serve();
			System.out.println("---------------------------------------");
			server.stop();
		}catch(Exception e){
			throw new RuntimeException("index thrift server start failed!!"+"/n"+e.getMessage());
		}
	}

}


java client
Java代码 复制代码 收藏代码
  1. package com.gemantic.analyse.thrift.index;  
  2.   
  3. import org.apache.thrift.TException;  
  4. import org.apache.thrift.protocol.TBinaryProtocol;  
  5. import org.apache.thrift.protocol.TProtocol;  
  6. import org.apache.thrift.transport.TSocket;  
  7. import org.apache.thrift.transport.TTransport;  
  8.   
  9. public class ThriftClientTest {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      * @throws TException  
  14.      */  
  15.     public static void main(String[] args) throws TException {  
  16.         // TODO Auto-generated method stub  
  17.         TTransport transport = new TSocket("10.0.0.41"9813);  
  18.         long start=System.currentTimeMillis();  
  19. //      TTransport transport = new TSocket("218.11.178.110",9090);  
  20.         TProtocol protocol = new TBinaryProtocol(transport);  
  21.         IndexNewsOperatorServices.Client client=new IndexNewsOperatorServices.Client(protocol);  
  22.         transport.open();  
  23.   
  24.           
  25.         client.deleteArtificiallyNews(123456);  
  26.         NewsModel newsModel=new NewsModel();  
  27.         newsModel.setId(789456);  
  28.         newsModel.setTitle("this from java client");  
  29.         newsModel.setContent(" 世界杯比赛前,由于塞尔维亚和黑山突然宣布分裂,国际足联开会决定剔除塞黑,由世界上球迷最多的国家顶替,名额恰巧来到中国。举国上下一片欢腾,中国足协决定由“成世铎”(成龙+阎世铎)组队,进军世界杯。");  
  30.         newsModel.setAuthor("ddc");  
  31.         newsModel.setMedia_from("新华08");  
  32.         client.indexNews(newsModel);  
  33.         transport.close();  
  34.         System.out.println((System.currentTimeMillis()-start));  
  35.         System.out.println("client sucess!");  
  36.     }  
  37.   
  38. }  
package com.gemantic.analyse.thrift.index;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;

public class ThriftClientTest {

	/**
	 * @param args
	 * @throws TException 
	 */
	public static void main(String[] args) throws TException {
		// TODO Auto-generated method stub
		TTransport transport = new TSocket("10.0.0.41", 9813);
		long start=System.currentTimeMillis();
//		TTransport transport = new TSocket("218.11.178.110",9090);
        TProtocol protocol = new TBinaryProtocol(transport);
        IndexNewsOperatorServices.Client client=new IndexNewsOperatorServices.Client(protocol);
        transport.open();

        
        client.deleteArtificiallyNews(123456);
        NewsModel newsModel=new NewsModel();
        newsModel.setId(789456);
        newsModel.setTitle("this from java client");
        newsModel.setContent(" 世界杯比赛前,由于塞尔维亚和黑山突然宣布分裂,国际足联开会决定剔除塞黑,由世界上球迷最多的国家顶替,名额恰巧来到中国。举国上下一片欢腾,中国足协决定由“成世铎”(成龙+阎世铎)组队,进军世界杯。");
        newsModel.setAuthor("ddc");
        newsModel.setMedia_from("新华08");
        client.indexNews(newsModel);
        transport.close();
        System.out.println((System.currentTimeMillis()-start));
        System.out.println("client sucess!");
	}

}


php client
Php代码 复制代码 收藏代码
  1. <?php  
  2. $GLOBALS['THRIFT_ROOT'] = '/home/tjiang/demo/thrift/lib/php/src';  
  3. require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';  
  4. require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';  
  5. require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';  
  6. require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php';  
  7. require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';  
  8. include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/TestThrift_types.php';  
  9. include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/IndexNewsOperatorServices.php';  
  10. $data=array(  
  11. 'id'=>'1',  
  12. 'title'=>'demo-标题',  
  13. 'content'=>'demo-内容',  
  14. 'media_from'=>'hexun',  
  15. 'author'=>'xiaodi667'  
  16. );  
  17. $thrif_server_url = '10.0.0.41';  
  18. $transport = new TSocket($thrif_server_url, 9813);  
  19. $transport->open();  
  20.   
  21. $protocol = new TBinaryProtocol($transport);  
  22.   
  23. $clientnew IndexNewsOperatorServicesClient($protocol$protocol);  
  24. $obj = new NewsModel($data);  
  25. $result = $client->indexNews($obj);  
  26.   
  27. $transport->close();  
  28. ?>  
<?php
$GLOBALS['THRIFT_ROOT'] = '/home/tjiang/demo/thrift/lib/php/src';
require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';
require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php';
require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';
include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/TestThrift_types.php';
include_once $GLOBALS['THRIFT_ROOT'].'/packages/TestThrift/IndexNewsOperatorServices.php';
$data=array(
'id'=>'1',
'title'=>'demo-标题',
'content'=>'demo-内容',
'media_from'=>'hexun',
'author'=>'xiaodi667'
);
$thrif_server_url = '10.0.0.41';
$transport = new TSocket($thrif_server_url, 9813);
$transport->open();

$protocol = new TBinaryProtocol($transport);

$client= new IndexNewsOperatorServicesClient($protocol, $protocol);
$obj = new NewsModel($data);
$result = $client->indexNews($obj);

$transport->close();
?>



python client
Python代码 复制代码 收藏代码
  1. #!/usr/bin/env python  
  2.   
  3. #  
  4. # Licensed to the Apache Software Foundation (ASF) under one  
  5. # or more contributor license agreements. See the NOTICE file  
  6. # distributed with this work for additional information  
  7. # regarding copyright ownership. The ASF licenses this file  
  8. # to you under the Apache License, Version 2.0 (the  
  9. # "License"); you may not use this file except in compliance  
  10. # with the License. You may obtain a copy of the License at  
  11. #  
  12. #   http://www.apache.org/licenses/LICENSE-2.0  
  13. #  
  14. # Unless required by applicable law or agreed to in writing,  
  15. # software distributed under the License is distributed on an  
  16. # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY  
  17. # KIND, either express or implied. See the License for the  
  18. # specific language governing permissions and limitations  
  19. # under the License.  
  20. #  
  21.   
  22. import sys  
  23.   
  24. from TestThrift.ttypes import NewsModel  
  25. from TestThrift.IndexNewsOperatorServices import Client  
  26.   
  27. from thrift import Thrift  
  28. from thrift.transport import TSocket  
  29. from thrift.transport import TTransport  
  30. from thrift.protocol import TBinaryProtocol  
  31.   
  32. try:  
  33.   
  34.   # Make socket  
  35.   transport = TSocket.TSocket('10.0.0.41'9813)  
  36.   
  37.   # Buffering is critical. Raw sockets are very slow  
  38.   transport = TTransport.TBufferedTransport(transport)  
  39.   
  40.   # Wrap in a protocol  
  41.   protocol = TBinaryProtocol.TBinaryProtocol(transport)  
  42.   
  43.   # Create a client to use the protocol encoder  
  44.   client = Client(protocol)  
  45.   
  46.   # Connect!  
  47.   transport.open()  
  48.   
  49.   client.deleteArtificiallyNews(123)  
  50.     
  51.   newsModel=NewsModel()  
  52.   newsModel.id=123456  
  53.   newsModel.title="python Test"  
  54.   newsModel.content="client test  come from python";  
  55.   newsModel.media_from="xinhua08"  
  56.     
  57.   client.indexNews(newsModel)  
  58.     
  59.   #close  
  60.   transport.close()  
  61. except Thrift.TException, tx:  
  62.   print '%s' % (tx.message)  
#!/usr/bin/env python

#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

import sys

from TestThrift.ttypes import NewsModel
from TestThrift.IndexNewsOperatorServices import Client

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

try:

  # Make socket
  transport = TSocket.TSocket('10.0.0.41', 9813)

  # Buffering is critical. Raw sockets are very slow
  transport = TTransport.TBufferedTransport(transport)

  # Wrap in a protocol
  protocol = TBinaryProtocol.TBinaryProtocol(transport)

  # Create a client to use the protocol encoder
  client = Client(protocol)

  # Connect!
  transport.open()

  client.deleteArtificiallyNews(123)
  
  newsModel=NewsModel()
  newsModel.id=123456
  newsModel.title="python Test"
  newsModel.content="client test  come from python";
  newsModel.media_from="xinhua08"
  
  client.indexNews(newsModel)
  
  #close
  transport.close()
except Thrift.TException, tx:
  print '%s' % (tx.message)


Csharp client
C#代码 复制代码 收藏代码
  1. TTransport transport = new TSocket("10.0.0.41", 9813);  
  2. TProtocol protocol = new TBinaryProtocol(transport);  
  3. IndexNewsOperatorServices.Client client = new IndexNewsOperatorServices.Client(protocol);  
  4.   
  5. transport.Open();  
  6. NewsModel model = new NewsModel();  
  7. model.Author = "jww";  
  8. model.Title = "title";  
  9. model.Content = "client   Come   From   CSharp";  
  10. model.Id = 1;  
  11.   
  12. client.deleteArtificiallyNews(123);  
  13. Console.WriteLine(client.indexNews(model));  
                TTransport transport = new TSocket("10.0.0.41", 9813);
                TProtocol protocol = new TBinaryProtocol(transport);
                IndexNewsOperatorServices.Client client = new IndexNewsOperatorServices.Client(protocol);

                transport.Open();
                NewsModel model = new NewsModel();
                model.Author = "jww";
                model.Title = "title";
                model.Content = "client   Come   From   CSharp";
                model.Id = 1;

                client.deleteArtificiallyNews(123);
                Console.WriteLine(client.indexNews(model));




五、Thrift 协议栈 以及各层的使用(java 为例)

1、model   interface
       服务的调用接口以及接口参数model、返回值model
2、Tprotocol    协议层
         将数据(model)编码 、解码 。
3、Ttramsport 传输层
        编码后的数据传输(简单socket、http)
5、Tserver
        服务的Tserver类型,实现了几种rpc调用(单线程、多线程、非阻塞IO)

六、与protocolbuffer的区别
http://liuchangit.com/development/346.html
           
http://stackoverflow.com/questions/69316/biggest-differences-of-thrift-vs-protocol-buffers

区别:
1、Another important difference are the languages supported by default.    protobuf: Java, C++, Python    Thrift: Java, C++, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, Ocaml
支持语言不同,thrift支持着更多的语言 。
2、Thrift supports ‘exceptions 。
   thrift支持服务的异常 。
3、Protocol Buffers much easier to read 。Protobuf API looks cleaner, though the generated classes are all packed as an inner classes which is not so nice.
   Protocol Buffers 在文档方面比thrift丰富,而且比thrift简单 。
4、Protobuf serialized objects are about 30% smaller then Thrift.
   Protocol Buffers在序列化/反序列化、传输上性能更优 。
5、RPC is another key difference. Thrift generates code to implement RPC clients and servers wheres Protocol Buffers seems mostly designed as a data-interchange format alone. 
    thrift提供了一套完整的rpc服务实现(多线程socket、非阻塞的socket....)
6、And according to the wiki the Thrift runtime doesn't run on Windows.
   thrift 对有些语言在windows上不支持:C++   .....




  • 大小: 66.3 KB

来源:http://gemantic.iteye.com/blog/1199214

 

分享到:
评论

相关推荐

    thrift c++ php

    在C++端,开发者将实现`Calculator`服务的服务器端代码,这通常涉及到创建一个处理请求的类,并且该类会继承自Thrift自动生成的接口。服务器会监听指定的网络端口,等待来自PHP客户端的请求。 ```cpp class ...

    php调用JAVA类

    当我们需要将已有的Java类或方法整合到PHP项目中时,就需要实现PHP调用JAVA类的功能。下面将详细探讨这一技术实现。 1. **JavaBridge**:PHP调用Java最常用的方法之一是通过JavaBridge,这是一个PHP扩展,允许PHP...

    thrift介绍、各种server的比较、多接口服务实现

    Thrift IDL 文件被编译成多种编程语言的代码,如 C++, Java, Python 等,这些代码实现了 RPC(远程过程调用)协议层和传输层。 Thrift 的特性包括: 1. 接口描述语言:Thrift 提供了一种类似于 Java 或 C++ 的语言...

    Apache Thrift 使用说明

    Thrift 提供了一个集成的代码生成工具,允许开发者定义数据类型和服务接口,然后自动生成多种编程语言(如 C++ 和 Java)的客户端和服务器端代码,实现高效、可靠的远程过程调用(RPC)。 在 Ubuntu 系统下安装 ...

    用C#和C++写的Apache Thrift的小范例

    本例改编自Apache Thrift教程: ... http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ ... 我用c++和c#分别实现了client和server,他们之间可以用任意组合互相调用,没有太复杂的功能,非常利于初学Thrift.

    基于Thrift实现的游戏匹配项目

    Thrift IDL允许开发者以一种声明式的方式定义服务接口和数据结构,然后通过Thrift编译器自动生成对应语言的客户端和服务端代码,支持的语言包括C++、Java、Python、PHP等,这极大地简化了跨语言服务开发的复杂性。...

    thrift源码+DEMO+简单教程

    Thrift IDL是Thrift的核心部分,它是一种类似C++或Java的语法,用于定义服务接口和数据结构。通过IDL,开发者可以声明服务方法、数据类型(如结构体、枚举、常量)以及服务间的交互方式。例如: ```idl service ...

    thrift vc2008版本静态库

    - Thrift 支持多种编程语言,如C++, Java, Python, PHP, Ruby等,使得跨语言服务开发变得简单。 - 它通过定义IDL(接口定义语言)文件来描述服务接口,然后自动生成客户端和服务端的代码。 2. **VC2008 静态库**...

    thrift例子

    除了Java,Thrift还支持C++、Python、PHP、C#、Ruby等多种语言,使得服务可以在各种平台和环境中无缝对接。 7. **线程模型**:Thrift提供了多种服务器实现,如单线程、多线程和异步模式。在实际应用中,需要根据...

    thrift安装

    1. **跨语言性**:Thrift支持众多编程语言,如C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk等,使得服务的开发和调用可以在不同的语言环境中进行。 2. **高性能**:Thrift通过高效...

    thrift php教程thrift-tutorial-php-master.zip

    Thrift通过定义一种中间表示(IDL,接口定义语言),允许开发者在多种编程语言之间进行通信,如C++, Java, Python, PHP等。在本教程"thrift php教程thrift-tutorial-php-master.zip"中,我们将深入学习如何使用...

    maven-thrift-server

    - 它通过IDL(接口定义语言)来定义服务和数据结构,然后生成相应的客户端和服务器端代码,支持包括Java、Python、C++、PHP等多种语言。 2. **Maven-Thrift插件** - Maven-Thrift-Server项目通常依赖于`maven-...

    thrift入门教程+代码

    Thrift通过一个接口描述语言(IDL)来定义服务,然后自动生成相应的客户端和服务器端代码,支持多种编程语言,如C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk等。 Thrift的核心概念...

    thrift jar包及相关学习步骤

    Thrift通过定义一种中间描述文件(.thrift),可以将服务接口定义转换为多种编程语言的代码,包括Java、Python、C++、PHP等,使得不同语言之间可以方便地进行数据交换和服务调用。 标题“thrift jar包及相关学习...

    thrift基础文档

    1. **接口定义语言(IDL)**:Thrift使用类似于C++或Java的语法来定义服务接口、数据结构(structs)和枚举类型(enums)。例如: ```idl service Calculator { i32 add(1:i32 num1, 2:i32 num2) } ``` 这定义...

    thrift-0.9.3.exe

    Thrift支持多种编程语言,包括但不限于Java、Python、C++、C#、PHP、Ruby等,这使得它成为构建分布式系统和微服务的理想工具。它的优点在于能够提供高效、轻量级的通信机制,同时降低跨语言开发的复杂性。通过使用...

    thrift的使用介绍

    Thrift通过定义一种中间表示(IDL,Interface Definition Language)来描述服务接口,然后自动生成相应的客户端和服务器端代码,使得开发者可以轻松地在多种语言之间进行数据交换和服务调用。 **1. Thrift IDL** ...

    thrift 教程

    Thrift允许定义数据类型和服务接口,然后自动生成多种编程语言的代码,使得不同语言之间可以方便地进行二进制通信,实现了高效、轻量级的远程过程调用(RPC)。 在“thrift 教程”中,你可能会学习到以下几个关键...

    Thrift工具和依赖的jar包

    5. **服务器和客户端库**:编译后的Thrift代码包含服务器端的处理程序接口和客户端的调用接口,开发者只需实现具体的服务逻辑即可。 6. **编译工具**:`thrift-0.9.3.exe`是Thrift的编译工具,它负责将IDL文件转换...

    thrift-0.12.0

    Thrift通过IDL(Interface Definition Language,接口定义语言)来定义RPC(Remote Procedure Call,远程过程调用)的接口和数据类型,然后通过thrift编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, ...

Global site tag (gtag.js) - Google Analytics