Thrift入门

最近项目要用到Thrift这个东东,花了些时间进行了学习,现整理一下。

Thrift这个东西,是一种跨语言的RPC框架,不同语言开发的系统可以利用它进行通信。

第一步:

先写个脚本,命名为TestService.thrift,放到你能找到的目录下。

service TestService{
    void TestFunc1(1:string inputValue);
}

打开控制台执行thrift命令:thrift -gen csharp TestService.thrift,会在你指定的目录下生成一个gen-csharp文件夹,里面有所需要的TestService.cs文件。

第二步:

将生成的TestService.cs文件放到你新建的项目中。如下图所示

之后需要用NuGet添加一个thrift的引用,我用的是如下版本

第三步:再添加一个winform程序和一个控制台应用程序,一个用于发送消息,一个用于接收显示消息。

如下:

ThriftClient,中MainForm.cs部分代码如下:

        /// <summary>
        /// 点击发送按钮
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnSend_Click(object sender, EventArgs e)
        {
            string message = TxtMessage.Text.Trim();

            using (TTransport transport = new TSocket("127.0.0.1", 2233))

            {
                using (TProtocol protocol = new TBinaryProtocol(transport))
                {
                    transport.Open();
                    using (TestService.Client client = new TestService.Client(protocol))
                    {
                        try
                        {
                            client.TestFunc1(message);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "发生错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
        }

ThriftServer中,Program.cs部分代码如下:

    class Program
    {
        static void Main(string[] args)
        {
            ThriftServer thriftServer = new ThriftServer();
            TestService.Processor processor = new TestService.Processor(thriftServer);
            TServerTransport transport = new TServerSocket(2233);
            TServer server = new TThreadPoolServer(processor, transport);
            Console.WriteLine("服务启动....");
            server.Serve();
            Console.ReadLine();
        }
    }

    public class ThriftServer : TestService.Iface
    {
        public void TestFunc1(string inputValue)
        {
            Console.WriteLine("{0}:{1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), inputValue);
        }
    }

以上代码可以看出,IP和端口号已写死,实际在应用中,可写在配置文件中,方便修改。

第四步:

测试一下,大功告成!

猜你喜欢

转载自www.cnblogs.com/yuwuji/p/9301074.html