• Thrift入门--用C#简单实现通讯服务小DEMO


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

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

    接下来开始战斗:

    第一步:先从官网下载Thrift。

    官网地址:http://thrift.apache.org/

    为方便使用,我下载的是thrift-0.11.0.exe文件。

    第二步:

    配置环境变量,方便使用。

    将下载的thrift-0.11.0.exe文件改名为thrift.exe(改名是为了后续使用命令行时比较方便),并放到一个目录下,笔者放到的是“C:Program FilesThrift”这个目录。

    然后配置系统环境变量中的Path,如图(笔记系统是WINDOWS10,各别系统配置界面可能不一样)。

    第三步:

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

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

    打开控制台执行thrift命令:thrift -gen csharp TestService.thrift(如果你已经把thrift-0.11.0.exe改名成thrift的话),会在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和端口号已写死,实际在应用中,可写在配置文件中,方便修改。

    第六步:

    测试一下,大功告成!

  • 相关阅读:
    问题记录之spring-mvc.xml配置文件报错
    问题记录之用poi生成图片并插入到word时,图片中的中文显示不出来
    问题记录之每次打开vmware的时候都会跳出xftp的安装程序问题解决
    DataTable和List之间互转
    .NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法
    SQL Server表分区详解(转)
    vs2017使用GitHub插件发布项目到github
    jquery autocomplete 在IE11中出现打开网页输入框有默认值时下拉列表是已经打开的状态解决
    MVC DropDownLis 二级联动实现
    sql 查询某个表在哪些存储过程(SP)中使用到
  • 原文地址:https://www.cnblogs.com/yuwuji/p/9301074.html
Copyright © 2020-2023  润新知