1、下载

去官网 https://thrift.apache.org/download 下载两个文件,下载地址 http://archive.apache.org/dist/thrift/0.9.3/

  • thrift-0.9.3.exe

用于将 .thrift 文件编译成其他语言文件(如 .cs, .cpp 等)。

 
  • thrift-0.9.3.tar.gz

源代码,用于生成不同语言的 thrift 库文件。

2、Thrift-0.9.3.exe配置

  • 新建thrift文件夹,将下载的thrift-0.9.3.exe重新命名为thrift.exe后放到thtift文件夹下,配置环境变量
  • 打开cmd,输入thrift -version

3、thrift.dll编译

将 thrift-0.9.3.tar.gz 解压,进入 lib/csharp/src 文件夹,使用 Visual Studio 打开 Thrift.sln 文件,编译。完成后可在 bin/Debug 中找到 Thrift.dll 文件,就是我们每次使用 Thrift 必须加载的库文件。(提示:编译时可能会弹框提示需要 .net  framework 3.5 的库,按照提示链接去官网 https://www.microsoft.com/en-us/download/details.aspx?id=22 下载安装即可)

4、编写 Thrift 脚本

假设服务端(Server)为客户端(Client)提供简单的数学运算功能。编写 demo.thrift 脚本如下:

namespace csharp MathClient
namespace csharp MathServer service MathService{
i32 add (1:i32 a, 2:i32 b),
i32 sub (1:i32 a, 2:i32 b),
i32 mul (1:i32 a, 2:i32 b),
i32 div (1:i32 a, 2:i32 b),
i32 mod (1:i32 a, 2:i32 b)
}

  从控制台进入 demo.thrift 的目录后,编译该文件为 C# 代码:

随后会生成一个 gen-csharp 的文件夹,其中包括 MathService.cs 文件,该文件需要同时导入到 Server 和 Client 的程序中,下面将详细说明。

如果是两种语言,如 Java 和 C# 通信的话,需要 –gen csharp 和 –gen java 分别编译一次,将得到的 .cs 和 .class 文件分别导入到两个项目中。

5、Server 程序

在 Visual Studio 中新建 C# Console Application 程序:ThriftServer。将 Thrift.dll. 导入到 Reference 中,同时将之前生成的 MathService.cs 导入项目中,并在 Program.cs 中包含:

using Thrift.Server;
using Thrift.Transport;

新建一个类 MathServer.cs (注意不是 MathService.cs),实现 MathService.Iface 接口:

public class MathServer : MathService.Iface
{
public MathServer() { }
public int add(int a, int b)
{
Console.WriteLine("Called add({0},{1})={2}", a, b, a + b);
return a + b;
}
public int sub(int a, int b)
{
Console.WriteLine("Called sub({0},{1})={2}", a, b, a - b);
return a + b;
}
public int mul(int a, int b)
{
Console.WriteLine("Called mul({0},{1})={2}", a, b, a * b);
return a + b;
}
public int div(int a, int b)
{
Console.WriteLine("Called div({0},{1})={2}", a, b, a / b);
return a / b;
}
public int mod(int a, int b)
{
Console.WriteLine("Called mod({0},{1})={2}", a, b, a % b);
return a % b;
}
}

然后修改 Program.cs 中的 Main 函数为:

static void Main(string[] args)
{
try
{
MathServer handler = new MathServer();
MathService.Processor processor = new MathService.Processor(handler);
TServerTransport serverTransport = new TServerSocket();
TServer server = new TSimpleServer(processor, serverTransport);
Console.WriteLine("Starting the server...");
server.Serve();
}
catch (Exception x)
{
Console.WriteLine(x.StackTrace);
}
Console.WriteLine("done.");
}

这样 ThriftServer 项目就可以运行了。它开启 9095 端口(可以自设),然后等待 Client 与其通信。

6、Client 端

同样新建一个C#控制台项目:ThriftClient,并将 Thrift.dll 和 MathService.cs 导入到项目中,在Program.cs 中包含:

using Thrift.Transport;
using Thrift.Protocol;

修改 Program.cs 中的 Main 函数如下:

static void Main(string[] args)
{
TTransport transport = new TSocket("localhost", );
transport.Open(); TProtocol protocal = new TBinaryProtocol(transport);
MathService.Client client = new MathService.Client(protocal); Console.WriteLine(client.add(, ));
Console.WriteLine(client.sub(, ));
Console.WriteLine(client.mul(, ));
Console.WriteLine(client.div(, ));
Console.WriteLine(client.mod(, ));
}

7、运行

首先运行 MathServer,可以看到:

然后运行 MathClient,可以看到:

同时 MathServer 的控制台显示:

参考:Apache Thrift 配置与简单实例——C# C/S 通信

thrift 安装的更多相关文章

  1. thrift安装及python和c++版本调试

    一.安装过程 1.安装依赖库 ]# yum install boost-devel-static libboost-dev libboost-test-dev libboost-program-opt ...

  2. Mac上brew&thrift安装 以及在thrift架构下,自己新作了maven的小例 Demo

    1.缘由 前几天偶尔在网上看到thrift的信息,其内容和作用极大的引起了我的兴趣,因为我也是做iOS开发的,通过在网上的查询发现信息虽然很多实用的很少,容易误导他人,经过自己的成功实践,做了笔录,为 ...

  3. thrift安装及常见问题

    一.安装thrift (macOS / Linux) 1. 下载thrift0.10.0源码 https://github.com/apache/thrift/releases/tag/0.10.0 ...

  4. 【Thrift一】Thrift安装部署

    Thrift安装部署 Thrift安装部署 下载源码包 安装g++ 解压Thrift安装包 安装boost开发工具 测试(python版) 下载源码包 wget http://apache.fayea ...

  5. Thrift安装介绍

    一.简介 1.语言库要求 因为thrift支持多语言.所以编译thrift源代码的过程中,会用到该语言的一些类库.如c++的boost.java的jdk等. 那么,在安装thrift过程中,须要对各种 ...

  6. thrift 安装介绍

    一.About  thrift            thrift是一种可伸缩的跨语言服务的发展软件框架.它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Ja ...

  7. Windows Thrift安装及HelloWorld

    Thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(除了二进制,也支持json等常用序列化机制),官网地址:http://thrift.apache.org 跨 ...

  8. Thrift入门初探--thrift安装及java入门实例

    什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...

  9. Openresty使用Thrift安装步骤

    最新想用Golang与Openresty相互通讯调用,使用RPC协议来实现,后来研究最终选择了Thrift:主要还是FB实现了支持Lua和Go模块,直接编译就可以成功嵌套使用,非常方便:研究了两天最后 ...

  10. golang高性能RPC:Apache Thrift安装使用完全攻略

    在企业应用中RPC的使用可以说是十分的广泛,使用该技术可以方便的与各种程序交互而不用考虑其编写使用的语言. 如果你对RPC的概念还不太清楚,可以点击这里. 现今市面上已经有许多应用广泛的RPC框架,比 ...

随机推荐

  1. Python-11-生成器

    一.定义 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用__iter__方法),所以生成器就是一种迭代器. 二.生成器的两种形式 1. 生成器函数 使用yield代替r ...

  2. python 读取环境变量

    python 读取环境变量 前言 在使用python时候千万不要把账户密令直接写入脚本,特别是当你计划开源自己的作品时. 为了保护账户信息,你需要让脚本从环境中导入敏感信息. 读取方法 import ...

  3. scope:provided影响子依赖

    一.问题 在上一篇<SpringBoot项目启动不走内嵌容器>中发现,provided会影响子依赖. 标记为scope:provided的jar在编译和运行时有作用,表明了运行时depen ...

  4. spring源码解析前瞻

    很多人有疑问:为什么要读源码?读源码有什么用?我也一直问自己这些问题,读源码非常枯燥,工作中又用不到,慢慢的自己读源码越发现自己知识的不足,无法把知识串起来,形成知识体系.从单系统中常用的Spring ...

  5. Roads in the Kingdom CodeForces - 835F (直径)

    大意: 给定一个基环树, 求删除一条环上的边使得直径最小. 直径分两种情况 环上点延伸的树内的直径 两个环上点的树内深度最大的点匹配 第一种情况直接树形dp求一下, 第二种情况枚举删除的环边, 线段树 ...

  6. Java线程读写锁

    排他锁和共享锁: 读写锁:既是排他锁,又是共享锁.读锁,共享锁,写锁:排他锁 读和读是不互斥的 import java.util.HashMap; import java.util.Map; impo ...

  7. 转:深入浅出Java垃圾回收机制

    原文链接:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解G ...

  8. C#程序结构(学习笔记01)

    C#程序结构 [原文参考官方教程] https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/program-structure C# ...

  9. Flutter 与 Android 的交互

    https://juejin.im/post/5cd91de4518825686b120921 https://juejin.im/entry/5b64292be51d451995676398

  10. android studio 出现 Default Activity not found

    1.AndroidManifest.xml <activity android:name=".activity.StartPage" android:screenOrient ...