最近项目要用到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和端口号已写死,实际在应用中,可写在配置文件中,方便修改。
第六步:
测试一下,大功告成!