转载至 https://headsigned.com/posts/csharp-apache-thrift-demo/

This demo application shows how to implement a simple Apache Thrift client/server in C#.

Thrift is a software framework that enables creation of services that can be served and consumed by many different languages. This article is not a tutorial for Thrift, nor for the Thrift interface definition language - these you can find on the official tutorial pages.

You can download the source code or check it out at GitHub. Visual C# 2010 Express was used to create the solution.

How the demo works

There are 3 projects in the solution - Common, Server, and Client. Project ‘Common’ contains code that is shared by both client and server. This includes the code generated by the thrift compiler from the demo-interface.thrift file:

// demo-interface.thrift

namespace * Common.ThriftInterface

struct BookInfo
{
1: i32 Id,
2: string Author,
3: string Title
} service LibraryService
{
list<BookInfo> GetAllBooks();
BookInfo GetBook(1: i32 bookId);
}

The Thrift compiler will compile this code into two classes: BookInfo and LibraryService. This is done as a part of the Common project pre-build step by invoking the Vendor\Thrift.0.9.1.3\tools\thrift-0.9.1.exe.

Server

In order to expose the LibraryService, LibraryServiceHandler implements the generated LibraryService.Iface:

// LibraryServiceHandler.cs

internal class LibraryServiceHandler : LibraryService.Iface
{
// <snip> public List<BookInfo> GetAllBooks() { /* <snip> */ }
public BookInfo GetBook(int bookId) { /* <snip> */ }
}

An instance of this handler is passed to the LibraryService.Processor, and is served by starting a Thrift server:

// Server

var handler = new LibraryServiceHandler();
var processor = new LibraryService.Processor(handler); TServerTransport transport = new TServerSocket();
TServer server = new TThreadPoolServer(processor, transport); server.Serve();

Client

Connecting a client and consuming the service is also quite simple. You only need to know the address, port, and protocol of the server. In the demo application, out TThreadPoolServer uses the default protocol, which is binary:

// Client

var transport = new TSocket("localhost", );
var protocol = new TBinaryProtocol(transport);
var client = new LibraryService.Client(protocol); transport.Open(); var allBooks = client.GetAllBooks(); // Actual Thrift call
var firstBook = client.GetBook(allBooks.First().Id); // Actual Thrift call

This simple client/server demo shows how easy it is to get started with Thrift and C#. To learn more, check out the missing guide.

C# Apache Thrift Demo的更多相关文章

  1. Apache thrift RPC 双向通信

    在上一篇介绍Apache thrift 安装和使用,写了一个简单的demo,讲解thrift服务的发布和客户端调用,但只是单向的客户端发送消息,服务端接收消息.而客户端却得不到服务器的响应. 在不涉及 ...

  2. Apache Thrift 服务开发框架学习记录

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架. 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Servic ...

  3. Apache Thrift - 可伸缩的跨语言服务开发框架

    To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...

  4. Apache Thrift学习之二(基础及原理)

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详细介绍 Apache Thrift 的架构.开发和部署,并且 ...

  5. Apache Thrift学习之一(入门及Java实例演示)

    目录: 概述 下载配置 基本概念 数据类型 服务端编码基本步骤 客户端编码基本步骤 数据传输协议 实例演示(java) thrift生成代码 实现接口Iface TSimpleServer服务模型 T ...

  6. Apache Thrift入门(安装、测试与java程序编写)

    安装Apache Thrift ubuntu linux运行: #!/bin/bash #下载 wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thr ...

  7. jdbc链接hive报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport

    写了个jdbc连接hive2的demo,结果报错:java.lang.ClassNotFoundException: org.apache.thrift.transport.TTransport,实际 ...

  8. 【Java】分布式RPC通信框架Apache Thrift 使用总结

    简介 Apache Thrift是Facebook开源的跨语言的RPC通信框架,目前已经捐献给Apache基金会管理,由于其跨语言特性和出色的性能,在很多互联网公司得到应用,有能力的公司甚至会基于th ...

  9. Apache Thrift使用简介

    Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...

随机推荐

  1. #安装memcache

    安装memcache sudo apt-get install memcached sudo apt search php-memcache sudo apt-get install php-memc ...

  2. 端口占用问题:java.net.BindException: Address already in use: bind

    解决方法 方法一:换一个端口 若仍然想要使用该端口,则可以将占用该端口的进程杀死即可. 方法二:杀死占用该端口的进程 若仍然想要使用该端口,则可以将占用该端口的进程杀死即可 查找端口被占用的进程id ...

  3. Spring MVC 问题归纳

    记录一些在Spring MVC配置中出现的问题 一.配置tomcat包没有加载 错误: idea调试web项目时出现:java.lang.ClassNotFoundException:org.spri ...

  4. bootstrap Modal或者 bootbox弹窗时,页面混动至顶部

    bootstrap使用Modal时,页面自动滚动至了最顶部, 调用bootbox时,也是如此 查了半天资料,最后参考下述帖子,解决问题 https://stackoverflow.com/questi ...

  5. nginx.conf指令详解

    #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf ############### ...

  6. 全栈项目|小书架|服务器开发-Koa2中间件机制洋葱模型了解一下

    KOA2 是什么? Koa是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 通过利用 asyn ...

  7. jquery easyui datagrid的一些用法

    获取选中的多选数据 var rows = $('#Id').datagri('getSelections'); 选中单行的数据 var row = $(#Id).datagrid('getSelect ...

  8. 解决internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module 'resolve'

    internal/modules/cjs/loader.js:638 throw err; ^ Error: Cannot find module 'resolve' 根据提示可以知道有依赖没有安装完 ...

  9. instanceof 和isInstance

    Java中的instanceof关键字 instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边 ...

  10. MongoDB 3.6.1集群部署

    Mongodb安装 Linux版本:CentOS release 6.9 Mongodb版本:mongodb-linux-x86_64-3.6.1.tgz 示例是在一台主机上安装mongodb集群 端 ...