1. 新建一个目录,C:\test\thrift-test,里面建2个子文件夹,client-node和sever-csharp,然后把Thrift官方的thrift定义文件也拷贝进去。

2. 官方的thrift定义文件,会去引用一个shared的thrift文件,但是这个文件貌似没地方下载,导致生成接口时报错,索性我就把他从定义里面删掉,干净起见,注释也删了。

  1. namespace cpp tutorial
  2. namespace d tutorial
  3. namespace java tutorial
  4. namespace php tutorial
  5. namespace perl tutorial
  6. typedef i32 MyInteger
  7. const i32 INT32CONSTANT = 9853
  8. const map<string,string> MAPCONSTANT = {'hello':'world', 'goodnight':'moon'}
  9. enum Operation {
  10. ADD = 1,
  11. SUBTRACT = 2,
  12. MULTIPLY = 3,
  13. DIVIDE = 4
  14. }
  15. struct Work {
  16. 1: i32 num1 = 0,
  17. 2: i32 num2,
  18. 3: Operation op,
  19. 4: optional string comment,
  20. }
  21. exception InvalidOperation {
  22. 1: i32 what,
  23. 2: string why
  24. }
  25. service Calculator{
  26. void ping(),
  27. i32 add(1:i32 num1, 2:i32 num2),
  28. i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch),
  29. oneway void zip()
  30. }

3. 打开Visual Studio 2012,新建一个项目,名为thrift-1stApp-server,项目放在刚才建立的子目录server-csharp下。

4. 右键项目,选择Manage Nuget Packages,选择Online, 然后搜索thrift,第一个应该就是Apache官方提供的thrift C#库了,注意版本号和CreateBy属性,CreateBy一定要是The Apache Software Foundation,别下载山寨版。版本号要和接下来下载的thrift compiler对应。我这里显示的是2012年11月20日发布的0.9.0.0版本。点击安装,thrift.dll就被自动加入到项目引用里面了。

5. 现在thrift的windows版compiler(已经帮你编译好的exe),官方提供的下载链接是:http://thrift.apache.org/download/,只有最新0.91版的,找了半天也没找到0.90的,网上搜了下,总算下载到了:http://archive.apache.org/dist/thrift/0.9.0/

6. 把下载下来的thrift-0.9.0.exe,放到D:\Tools\thrift目录下。

7. 执行: C:\test\thrift-test\server-csharp\>D:\Tools\thrift\thrift-0.9.0 --gen csharp ..\tutorial-tutorial.thrift

8. 你应该能看到,多出来一个子目录gen-csharp,把该目录下的所有文件都Include到Visual Studio的工程里面去。

9. 编译一下,应该是没有编译错误的。

【开始编写Server端代码】:

1. 添加CalculatorHandler.cs:

  1. using System;
  2. namespace thrift_1stApp_server
  3. {
  4. public class CalculatorHandler : Calculator.Iface
  5. {
  6. public CalculatorHandler()
  7. {
  8. }
  9. public void ping()
  10. {
  11. Console.WriteLine("ping()");
  12. }
  13. public int add(int n1, int n2)
  14. {
  15. Console.WriteLine("add({0},{1})", n1, n2);
  16. return n1 + n2;
  17. }
  18. public int calculate(int logid, Work work)
  19. {
  20. Console.WriteLine("calculate({0}, [{1},{2},{3}])", logid, work.Op, work.Num1, work.Num2);
  21. int val = 0;
  22. switch (work.Op)
  23. {
  24. case Operation.ADD:
  25. val = work.Num1 + work.Num2;
  26. break;
  27. case Operation.SUBTRACT:
  28. val = work.Num1 - work.Num2;
  29. break;
  30. case Operation.MULTIPLY:
  31. val = work.Num1 * work.Num2;
  32. break;
  33. case Operation.DIVIDE:
  34. if (work.Num2 == 0)
  35. {
  36. InvalidOperation io = new InvalidOperation();
  37. io.What = (int)work.Op;
  38. io.Why = "Cannot divide by 0";
  39. throw io;
  40. }
  41. val = work.Num1 / work.Num2;
  42. break;
  43. default:
  44. {
  45. InvalidOperation io = new InvalidOperation();
  46. io.What = (int)work.Op;
  47. io.Why = "Unknown operation";
  48. throw io;
  49. }
  50. }
  51. return val;
  52. }
  53. public void zip()
  54. {
  55. Console.WriteLine("zip()");
  56. }
  57. }
  58. }

2. 实现Main方法:

  1. using System;
  2. using Thrift.Server;
  3. using Thrift.Transport;
  4. namespace thrift_1stApp_server
  5. {
  6. class Program
  7. {
  8. public static void Main()
  9. {
  10. try
  11. {
  12. CalculatorHandler handler = new CalculatorHandler();
  13. Calculator.Processor processor = new Calculator.Processor(handler);
  14. TServerTransport serverTransport = new TServerSocket(9090);
  15. TServer server = new TSimpleServer(processor, serverTransport);
  16. Console.WriteLine("Starting the server...");
  17. server.Serve();
  18. }
  19. catch (Exception x)
  20. {
  21. Console.WriteLine(x.StackTrace);
  22. }
  23. Console.WriteLine("done.");
  24. }
  25. }
  26. }

3. 编译运行,控制台会显示:Starting the Server...,然后就等待。

【开始编写Client端代码】:

1. 执行: C:\test\thrift-test\client-node>npm init,一路回车直到终结。
2. 安装thrift库,执行: C:\test\thrift-test\client-node>npm install thrift --save。

3. 生成Nodejs接口,执行:c:\test\thrift-test\client-node>D:\Tools\thrift\thrift-0.9.0.exe --gen js:node .
.\tutorial-tutorial.thrift

4. 应该可以看到,多了一个gen-nodejs的目录

5. TBD...

Thrift实践的更多相关文章

  1. erlang+thrift配合开发

    I  think, thrift is a  tcp/ip based Client-Server architecture multi-languages supported RPC framewo ...

  2. Thrift简单实践

    0.什么是RPC RPC(Remote Procedure Call - 远程过程调用),是通过网络从远程计算机上请求服务,而不需要了解底层网路技术的细节.简单点说,就是像调用本地服务(方法)一样调用 ...

  3. RPC与实践(thrift在windows的编译/安装--c++版)

    ------------------------------------------------------------------------ RPC 功能目标 RPC 的主要功能目标是让构建分布式 ...

  4. RPC框架实践之:Apache Thrift

    一.概述 RPC(Remote Procedure Call)即 远程过程调用,说的这么抽象,其实简化理解就是一个节点如何请求另一节点所提供的服务.在文章 微服务调用链追踪中心搭建 一文中模拟出来的调 ...

  5. RPC原理与实践(二)----Thrift分层模型

    这一节我们从一下几个方面来讲一下Thrift的分层架构,按照官方的定义这是Thrift的网络栈,其中网络栈中分为一下几个部分,(由栈顶到栈底)server,processor,protocol,tra ...

  6. RPC原理与实践(一)----RPC原理与实现(Thrift版)

    什么是RPC?为什么要使用RPC? 首先什么是RPC,RPC全称Remote Process Call,远程过程调用,现在几乎所有的公司都在使用RPC这种架构,诸如YOUTUBE使用的Thrift,B ...

  7. 【转】Flume(NG)架构设计要点及配置实践

    Flume(NG)架构设计要点及配置实践   Flume NG是一个分布式.可靠.可用的系统,它能够将不同数据源的海量日志数据进行高效收集.聚合.移动,最后存储到一个中心化数据存储系统中.由原来的Fl ...

  8. Spark SQL Thrift Server 配置 Kerberos身份认证和权限管理

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 之前的博客介绍了通过Kerberos + Sentry的方式实现了hive server2的身份认证和权限管理功能,本文主 ...

  9. Thrift 个人实战--Thrift 的序列化机制

    前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...

随机推荐

  1. 用户配置文件(passwd/shadow)

    管理员工作,这是管理帐户的一个非常重要的组成部分.由于整个系统你在的管理, 和所有一般 郄用户帐号申请.所有的,他们会通过你的工作需要得到援助.所以,你需要知道他将如何管理服务器主机挈朋友 帐号! 在 ...

  2. myeclipse 8.5-10.0 安装 svn 方法(转)

    方法总结  方法一:在线安装  1.打开HELP->MyEclipse Configuration  Center.切换到SoftWare标签页.      2.点击Add Site 打开对话框 ...

  3. NET 中的多线程

    NET 中的多线程 为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在 ...

  4. NOI第一天感想&小结

    嘛...中午总算是到了深圳了--在虹桥机场和飞机上和市队大神们一起讨论各种各样奇(sang)葩(bing)的算(ren)法(lei)还是非常开心的,在此再各种膜拜一下尽管没来比赛的FFT大神@陈中瑞 ...

  5. 使用log4j日志-配置载入问题

    1.在eclipse中,把log4j.properties放在类路径下,在项目启动时就会自己主动载入. 2.在idea中.把log4j.properties放在类路径下,可是项目启动时不能直接载入(原 ...

  6. C#版的抓包软件

    C#版的抓包软件   [创建时间:2015-09-10 22:37:04] NetAnalyzer下载地址 不好意思啊,NetAnalyzer停更有点长了,今天继续填坑^&^ NetAnaly ...

  7. hdu 4035 Maze(期待更多经典的树DP)

    Maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) Total Submi ...

  8. CSDN博客ByeBye

    情绪csdn定制博客博客是不够的,没有足够的光.对于我这种极简的人,不合适. 我们不打算更新的博客. 至http://blog.edagarli.com/ 版权声明:本文博主原创文章.博客,未经同意不 ...

  9. (2)虚拟机下hadoop1.1.2集群环境搭建

    hadoop集群环境的搭建和单机版的搭建差点儿相同,就是多了一些文件的配置操作. 一.3台主机的hostname改动和IP地址绑定 注意:以下的操作我都是使用root权限进行! (1)3太主机的基本网 ...

  10. C#和Java中执行SQL文件脚本的代码(非常有用)

    原文:C#和Java中执行SQL文件脚本的代码(非常有用) 我们在做程序的时候有事后会涉及到利用sql文件 直接执行,可是在sql文件中有很多注释,我们要一句一句的执行首先必须的得把sql文件解析 去 ...