• Thrift写RPC接口


    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
        {
            /// <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

     

  • 相关阅读:
    输出由“*”组成的菱形
    一个简单的计算器(c++)
    输入学号,显示对应的姓名(c++)
    使用 Puppet 在 Windows Azure 中配备 Linux 和 Windows 环境
    微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
    微软开放技术开发了适用于 Windows Azure 移动服务的开源 Android SDK
    微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库
    VM Depot 登陆中国!
    VM Depot 喜迎中国本土开源镜像!
    VM Depot 助您使用本地开源软件架设开发 Web 站点
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/7144730.html
Copyright © 2020-2023  润新知