`

thrift example

阅读更多

An Example

Thrift allows you to define data types and service interfaces in a simple definition file. Taking that file as input, the compiler generates code to be used to easily build RPC clients and servers that communicate seamlessly across programming languages.

For instance, say you would like to write a service to store user objects for your web frontend. You could write a Thrift file as follows:

struct UserProfile {
  1: i32 uid,
  2: string name,
  3: string blurb
}
service UserStorage {
  void store(1: UserProfile user),
  UserProfile retrieve(1: i32 uid)
}

Thrift does the heavy lifting. Instead of writing a load of boilerplate code to serialize and transport your objects and invoke remote methods, you can get right down to business. Here is some sample Python client code:

# Make an object
up = UserProfile(uid=1,
                 name="Mark Slee",
                 blurb="I'll find something to put here.")

# Talk to a server via TCP sockets, using a binary protocol
transport = TSocket.TSocket("localhost", 9090)
transport.open()
protocol = TBinaryProtocol.TBinaryProtocol(transport)

# Use the service we already defined
service = UserStorage.Client(protocol)
service.store(up)

# Retrieve something as well
up2 = service.retrieve(2)

Not much to it. Implementing the server as simple as filling in the blanks:

class UserStorageHandler : virtual public UserStorageIf {
 public:
  UserStorageHandler() {
    // Your initialization goes here
  }

  void store(const UserProfile& user) {
    // Your implementation goes here
    printf("store\n");
  }

  void retrieve(UserProfile& _return, const int32_t uid) {
    // Your implementation goes here
    printf("retrieve\n");
  }
};

int main(int argc, char **argv) {
  int port = 9090;
  shared_ptr<UserStorageHandler> handler(new UserStorageHandler());
  shared_ptr<TProcessor> processor(new UserStorageProcessor(handler));
  shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
  shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
  shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
  TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
  server.serve();
  return 0;
}

分享到:
评论

相关推荐

    thrift javascript example

    在这个"thrift javascript example"中,我们将深入探讨如何使用JavaScript与Thrift进行通信。首先,你需要理解Thrift的基本概念: 1. **IDL(Interface Definition Language)**: Thrift使用一种类似C++的语法来...

    thrift python example

    安装Thrift的Python绑定后,运行`thrift -gen py example.thrift`,这将生成一个`example_gen`目录,其中包含了Python客户端和服务器端的代码。 在`example_gen/example`模块中,你会找到`ExampleService`的客户端...

    thrift安装

    接下来,你可以编写Thrift IDL(接口定义语言)文件,如`example.thrift`,并使用Thrift编译器生成目标语言的代码。例如,要生成Python绑定,运行: ``` thrift -r --gen py example.thrift ``` 6. **使用生成的...

    thrift-0.9.1.exe和thrift-0.9.2.exe

    namespace java com.example.myapp service MyService { string sayHello(1:string name) } ``` 在这个例子中,我们定义了一个名为"MyService"的服务,它有一个方法"sayHello",接受一个字符串参数"name"并返回一...

    Thrift 示例代码_Java

    2. **生成的 Java 代码**:运行 `thrift -gen java example.thrift` 后,会生成如下的 Java 类: - `ExampleService.java`:服务接口类,包含了服务定义的方法。 - `ExampleService$Iface.java` 和 `...

    Thrift简单调用demo代码

    在`ThriftSimpleDemo`中,可能会有一个`example.thrift`文件,其中包含了服务接口的定义,比如一个`sayHello`方法,接受一个字符串参数并返回一个响应。 2. **代码生成**:通过Thrift编译器,我们可以将`.thrift`...

    thrift java build jar

    namespace java com.example.myservice service MyService { string echo(1: string message) } struct Message { 1: required string content } ``` 3. **生成 Java 代码** 使用已安装的 Thrift 编译器,将 `...

    spring与thrift集成

    将 Spring 与 Thrift 集成,可以利用 Spring 的强大功能来管理和调度 Thrift 服务,同时借助 Thrift 实现高效的数据传输和跨语言服务调用。 集成 Spring 和 Thrift 主要涉及以下几个步骤: 1. **创建 Thrift IDL ...

    finagle-http-thrift-example:Finagle HTTP 和 Thrift Clients \ Servers 示例

    然后你应该运行 Thrift Server: $ sbt "run-main com.acme.Example.ThriftServer"现在我们准备使用 HTTP 客户端进行一些测试调用: $ sbt "run-main com.acme.Example.HttpClient"在 HTTP 客户端你应该得到以下输出...

    CSS_namespace_thrift接口文档

    在IT行业中,Thrift是一种高性能、可扩展的跨语言服务开发框架,由Facebook于2007年开源。它的主要目标是解决大规模分布式系统中的数据通信问题,通过提供了一种结构化、高效的序列化和远程过程调用(RPC)机制,...

    Thrift架构介绍.docx

    namespace cpp example struct Book_Info { 1: i32 book_id, 2: string book_name, 3: string book_author, 4: double book_price, 5: string book_publisher, } ``` 生成代码后,服务端(Server)可以实现这...

    thrift-typescript-servlet-example:Thrift、TypeScript、Servlet

    在这个名为"thrift-typescript-servlet-example"的项目中,我们将探讨如何将它们集成以实现一个高效的跨语言服务通信系统。 首先,让我们深入了解每个组件: 1. **Thrift**:Thrift是由Facebook开发的一种开源跨...

    thrift-0.15.0.tar.gz

    4. **示例和测试**:`example`目录下通常会有各种语言的示例代码,帮助开发者快速理解和学习Thrift的使用。`test`目录则包含了对Thrift的各种单元测试,确保其功能的正确性。 5. **文档**:`docs`目录可能包含了...

    thrift-0.9.0-dev.tar.gz

    3. `example`:示例程序,用于演示如何使用Thrift构建服务和客户端。 4. `docs`:文档资料,帮助开发者理解和使用Thrift。 5. `bin`:编译后的工具,如thrift编译器的可执行文件。 6. `LICENSE`和`NOTICE`:关于...

    thrift-ios-nodejs-example:使用 Thrift 连接到 NodeJs 服务器的示例 iOS 客户端

    thrift -o client/ThriftTest --gen cocoa thrift/messaging-service.thrift thrift -o server --gen js:node thrift/messaging-service.thrift 您通常可能不想对生成的代码进行版本控制,而是在构建/编译时生成它...

    开源项目-thrift-iterator-go.zip

    6. `example`目录:可能包含了一些示例程序,展示如何在实际应用中使用这个库。 在实际使用这个开源项目时,你需要理解Thrift的消息格式和协议。Thrift消息是二进制的,包含了一个头部和一个数据体。头部通常包括了...

Global site tag (gtag.js) - Google Analytics