前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口。不清楚的可以看这个《Thrift总结(一)介绍》。做好之前的准备工作以后,下面就开始如何用Thrift写RPC接口。

  如何用Thrift写RPC接口

  1. 打开之前下载的thrift 源码,thrift-0.10.0libcsharpsrc ,编译生成Thrift.dll 文件。

  2. 新建一个空白解决方案命名为HelloThrift。在解决方案根目录下创建一个lib文件夹,将刚刚生成的Thrift.dll文件放入lib文件夹中。在解决方案分中建立两个控制台程序和一个类库,控制台程序分别命名为HelloThrift.Client 和 HelloThrift.Server,类库命名为Thrift.Interface。Client、Server和Interface分别引用lib文件夹中的Thrift.dll文件,将准备工作中生成的HelloService文件导入到Interface类库中。Client和Server分别引用Interface。具体结果如下图所示

  3. 创建完相关的项目和引用之后,在服务端HelloThrift.Server 创建一个类命名为MyHelloService,实现HelloService.Iface接口,代码如下:

  清单1.MyHelloService

using System;using HelloThrift.Interface;namespace HelloThrift.Server{    public class MyHelloService : HelloService.Iface    {        ///         /// 只有一个参数返回值为字符串类型的方法        ///         /// string类型参数        /// 返回值为string类型        public string HelloString(string para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客户端调用了HelloString方法");            return para;        }        ///         /// 只有一个参数,返回值为int类型的方法        ///         ///         /// 返回值为int类型        public int HelloInt(int para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客户端调用了HelloInt方法");            return para;        }        ///         /// 只有一个bool类型参数,返回值为bool类型的方法        ///         ///         /// 返回值为bool类型        public bool HelloBoolean(bool para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客户端调用了HelloBoolean方法");            return para;        }        ///         /// 返回执行为空的方法        ///         public void HelloVoid()        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客户端调用了HelloVoid方法");            Console.WriteLine("HelloWorld");        }        ///         /// 无参数,返回值为null的方法        ///         /// 返回值为null        public string HelloNull()        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客户端调用了HelloNull方法");            return null;        }    }}

  4. 创建服务器端HelloThrift.Server 宿主的实现代码,在Program.cs 中添加如下代码,这样一个thrift 服务器就创建好了。

  清单2.HelloThrift.Server

using System;using Thrift;using Thrift.Protocol;using Thrift.Server;using Thrift.Transport;using HelloThrift.Interface;namespace HelloThrift.Server{    class Program    {        static void Main(string[] args)        {            try            {                //设置服务端口为8080                TServerSocket serverTransport = new TServerSocket(9081);                //设置传输协议工厂                TBinaryProtocol.Factory factory = new TBinaryProtocol.Factory();                //关联处理器与服务的实现                TProcessor processor = new HelloService.Processor(new MyHelloService());                //创建服务端对象                TServer server = new TThreadPoolServer(processor, serverTransport, new TTransportFactory(), factory);                Console.WriteLine("服务端正在监听9081端口");                server.Serve();            }            catch (TTransportException ex)//捕获异常信息            {                //打印异常信息                Console.WriteLine(ex.Message);            }        }    }}

  5. 创建完服务端之后,下面开始生成一个客户端实现代码,在HelloThrift.Client 的 Program.cs 中添加如下代码:

  清单3.HelloThrift.Client

using System;using HelloThrift.Interface;using Thrift.Protocol;using Thrift.Transport;namespace HelloThrift.Client{    class Program    {        static void Main(string[] args)        {            try            {                //设置服务端端口号和地址                TTransport transport = new TSocket("localhost", 9081);                transport.Open();                //设置传输协议为二进制传输协议                TProtocol protocol = new TBinaryProtocol(transport);                //创建客户端对象                HelloService.Client client = new HelloService.Client(protocol);                //调用服务端的方法                Console.WriteLine(client.HelloString("HelloThrift"));                Console.ReadKey();            }            catch (TTransportException e)            {                Console.WriteLine(e.Message);            }        }    }}

  上面的代码调用了服务端的HelloString方法,服务端也会返回传入的传输值,客户端将服务端返回的数据打印出来。好了完成了代码以后,将先启动Server,在启动Client。客户端调用结果 和 服务端请求显示。

  说明

  1. 关于使用Thrift 构建我们自己的rpc 的方法,这里基本讲完了。其他的方法本文就不再演示了,调用起来都是一样。

  2. 后续会简单讨论一下Thrift 框架的通信原理。

  3. 源代码下载,HelloThrift.rar

server如何调用 thrift_Thrift总结(二)如何快速创建自己的RPC服务相关推荐

  1. server如何调用 thrift_Thrift入门很简单

    Thrift是什么? 是Facebook开源的跨语言RPC框架. 实战 这里实现一个简单的服务CalculatorService.引入maven依赖 org.apache.thrift libthri ...

  2. 两步使用Express快速创建web服务器

    一:首先需要给大家介绍一下Express~~~ Express 是一个基于 Node.js 平台,快速.开放.极简的 web 开发框架. 框架:是一个半成品,用来快速解决一类问题:库就是工具集,使用非 ...

  3. server如何调用 thrift_一文带你了解 Thrift,一个可伸缩的跨语言 RPC 框架(pinpoint 源码分析系列)...

    Thrift 是什么研究分布式调用链工具pinpoint的时候,在源码里看到了Thrift相关的代码,所以来了兴趣,想研究研究这个框架.Thrift 目前是 Apache 的一个项目,但是它是由fac ...

  4. Sql Server之旅——第十二站 sqltext的参数化处理

    Sql Server之旅--第十二站 sqltext的参数化处理 原文:Sql Server之旅--第十二站 sqltext的参数化处理 说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无 ...

  5. python_爬虫 16 Scrapy框架之(二)快速入门

    目录 一.安装和文档: 二.快速入门: 1.创建项目: 2.目录结构介绍: 3.使用Scrapy框架爬取糗事百科段子: 使用命令创建一个爬虫: 爬虫代码解析: 修改settings.py代码: 简单运 ...

  6. 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines

    [简介] Windows Admin Center是微软开发的一套可以部署在本地基于浏览器的GUI的工具集平台,其平台可用于管理Windows相关服务器和PC机器,我们可以利用Windows Admi ...

  7. 【Microsoft Azure 的1024种玩法】二十七. Azure Virtual Desktop虚拟桌面之快速创建配置(一)

    [简介] Azure 虚拟桌面是在云中运行的桌面和应用虚拟化服务,我们可以通过Azure 的虚拟桌面设置多会话 Windows 11 或 Windows 10操作系统的 部署,使整个 Windows ...

  8. G4Studio行业应用二次快速开发平台简介 支持开源软件

    1.1.G4Studio概述      G4Studio行业应用二次快速开发平台基于JavaEE技术体系,面向中小软件企业.以"标准功能可复用.通用模块可配置.行业需求快速开发.异构系统无缝 ...

  9. web/html5调用摄像头实现二维码扫描效果(代码实例)

    本文给大家介绍如何用web/html5调用摄像头实现二维码扫描的效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 利用html5(navigator.getUserMedia)调 ...

最新文章

  1. 通信系统概论_移动通信复习资料
  2. 【机器学习基础】一文详尽之支持向量机(SVM)算法!
  3. Introduction or Why Should I Bother
  4. Spring的@Configuration配置类-Full和Lite模式
  5. 组合数据类型练习、英语词频统计
  6. python怎么输出表格中随机数_python 输出一个随机数
  7. 云服务器zabbix server报错:Lack of free swap on Zabbix server
  8. python 图像压缩pca_在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
  9. CentOS 常用命令及快捷键整理[转载]
  10. 【图像重建】基于matlab GUI投影法图像重建【含Matlab源码 861期】
  11. php data取年月,PHP-date函数 年、月、日参数详解
  12. 结构变量输入不正确的顺序可能会导致不正确的操作结果
  13. 用Multisim对高频丙类谐振功率放大器进行仿真
  14. 异常值检验的一些方法
  15. 谷歌地图高清卫星地图
  16. 烦请大家支持一票,谢谢!!
  17. The Derivation About CNN and Antoencoder
  18. Bone Collector(01背包问题-两种写法)
  19. C语言利用数组输出26个小写字母
  20. 2019级C语言大作业 - 三国杀

热门文章

  1. Dapr微服务应用开发系列5:发布订阅构建块
  2. 如何在 ASP.NET Core 中 使用 功能开关
  3. 面试官:. NET5源码里用到了哪些设计模式?懵!
  4. Typescript前端接口联调自动化的探究与实践
  5. 小心 HttpClient 中的 FormUrlEncodeContent 的 bug
  6. 在.NET Core中用最原生的方式读取Nacos的配置
  7. EF Core 数据变更自动审计设计
  8. 微软开源Scalar,提升操作巨型Git仓库的速度
  9. .NET 程序员如何学习Vue
  10. WebAssembly和Blazor:解决了一个存在十年的老问题