您的位置:首页 > 其它

Thrift写RPC接口

2017-07-10 10:58 127 查看

Thrift总结(二)创建RPC服务

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

  如何用Thrift写RPC接口

  1. 打开之前下载的thrift 源码,thrift-0.10.0\lib\csharp\src ,编译生成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
{
/// <summary>
/// 只有一个参数返回值为字符串类型的方法
/// </summary>
/// <param name="para">string类型参数</param>
/// <returns>返回值为string类型</returns>
public string HelloString(string para)
{
System.Threading.Thread.Sleep(1 * 1000);

Console.WriteLine("客户端调用了HelloString方法");

return para;
}

/// <summary>
/// 只有一个参数,返回值为int类型的方法
/// </summary>
/// <param name="para"></param>
/// <returns>返回值为int类型</returns>
public int HelloInt(int para)
{
System.Threading.Thread.Sleep(1 * 1000);

Console.WriteLine("客户端调用了HelloInt方法");

return para;
}

/// <summary>
/// 只有一个bool类型参数,返回值为bool类型的方法
/// </summary>
/// <param name="para"></param>
/// <returns>返回值为bool类型</returns>
public bool HelloBoolean(bool para)
{
System.Threading.Thread.Sleep(1 * 1000);

Console.WriteLine("客户端调用了HelloBoolean方法");

return para;
}

/// <summary>
/// 返回执行为空的方法
/// </summary>
public void HelloVoid()
{
System.Threading.Thread.Sleep(1 * 1000);

Console.WriteLine("客户端调用了HelloVoid方法");

Console.WriteLine("HelloWorld");
}

/// <summary>
/// 无参数,返回值为null的方法
/// </summary>
/// <returns>返回值为null</returns>
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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: