server如何调用 thrift_Thrift总结(二)如何快速创建自己的RPC服务
前面介绍了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服务相关推荐
- server如何调用 thrift_Thrift入门很简单
Thrift是什么? 是Facebook开源的跨语言RPC框架. 实战 这里实现一个简单的服务CalculatorService.引入maven依赖 org.apache.thrift libthri ...
- 两步使用Express快速创建web服务器
一:首先需要给大家介绍一下Express~~~ Express 是一个基于 Node.js 平台,快速.开放.极简的 web 开发框架. 框架:是一个半成品,用来快速解决一类问题:库就是工具集,使用非 ...
- server如何调用 thrift_一文带你了解 Thrift,一个可伸缩的跨语言 RPC 框架(pinpoint 源码分析系列)...
Thrift 是什么研究分布式调用链工具pinpoint的时候,在源码里看到了Thrift相关的代码,所以来了兴趣,想研究研究这个框架.Thrift 目前是 Apache 的一个项目,但是它是由fac ...
- Sql Server之旅——第十二站 sqltext的参数化处理
Sql Server之旅--第十二站 sqltext的参数化处理 原文:Sql Server之旅--第十二站 sqltext的参数化处理 说到sql的参数化处理,我也是醉了,因为sql引擎真的是一个无 ...
- python_爬虫 16 Scrapy框架之(二)快速入门
目录 一.安装和文档: 二.快速入门: 1.创建项目: 2.目录结构介绍: 3.使用Scrapy框架爬取糗事百科段子: 使用命令创建一个爬虫: 爬虫代码解析: 修改settings.py代码: 简单运 ...
- 【Microsoft Azure 的1024种玩法】四十二. 通过Windows Admin Center快速创建Azure Virtual Machines
[简介] Windows Admin Center是微软开发的一套可以部署在本地基于浏览器的GUI的工具集平台,其平台可用于管理Windows相关服务器和PC机器,我们可以利用Windows Admi ...
- 【Microsoft Azure 的1024种玩法】二十七. Azure Virtual Desktop虚拟桌面之快速创建配置(一)
[简介] Azure 虚拟桌面是在云中运行的桌面和应用虚拟化服务,我们可以通过Azure 的虚拟桌面设置多会话 Windows 11 或 Windows 10操作系统的 部署,使整个 Windows ...
- G4Studio行业应用二次快速开发平台简介 支持开源软件
1.1.G4Studio概述 G4Studio行业应用二次快速开发平台基于JavaEE技术体系,面向中小软件企业.以"标准功能可复用.通用模块可配置.行业需求快速开发.异构系统无缝 ...
- web/html5调用摄像头实现二维码扫描效果(代码实例)
本文给大家介绍如何用web/html5调用摄像头实现二维码扫描的效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 利用html5(navigator.getUserMedia)调 ...
最新文章
- 通信系统概论_移动通信复习资料
- 【机器学习基础】一文详尽之支持向量机(SVM)算法!
- Introduction or Why Should I Bother
- Spring的@Configuration配置类-Full和Lite模式
- 组合数据类型练习、英语词频统计
- python怎么输出表格中随机数_python 输出一个随机数
- 云服务器zabbix server报错:Lack of free swap on Zabbix server
- python 图像压缩pca_在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
- CentOS 常用命令及快捷键整理[转载]
- 【图像重建】基于matlab GUI投影法图像重建【含Matlab源码 861期】
- php data取年月,PHP-date函数 年、月、日参数详解
- 结构变量输入不正确的顺序可能会导致不正确的操作结果
- 用Multisim对高频丙类谐振功率放大器进行仿真
- 异常值检验的一些方法
- 谷歌地图高清卫星地图
- 烦请大家支持一票,谢谢!!
- The Derivation About CNN and Antoencoder
- Bone Collector(01背包问题-两种写法)
- C语言利用数组输出26个小写字母
- 2019级C语言大作业 - 三国杀