thrift教程中提供了客户端和服务端的简单实现。

Client

      TTransport transport;if (args[0].contains("simple")) {//socket通信transport = new TSocket("localhost", 9090);transport.open();}else {TSSLTransportParameters params = new TSSLTransportParameters();params.setTrustStore("../../lib/java/test/.truststore", "thrift", "SunX509", "JKS");//加密的通信方式transport = TSSLTransportFactory.getClientSocket("localhost", 9091, 0, params);}//定义数据传输协议并绑定transportTProtocol protocol = new  TBinaryProtocol(transport);//使用transport创建客户端Calculator.Client client = new Calculator.Client(protocol);//使用生成的client进行调用perform(client);//关闭transporttransport.close();

对定义的thrift文件,会有一个Iface接口内部是所有接口的定义,Client就实现了这个生成的接口
比如有一个方法public String aaa(String param)
在Client的实现中就会有

    public Obj aaa(String name) throws org.apache.thrift.TException{send_aaa(name);return recv_aaa();}

send_XXX的方法会使用构造时传入的protocol进行write,recv_XXX方法会使用构造传入的protocol进行读取并组装到返回结果中,这里发送和传输的protocol是一样的,但是可以手动继承生成的Client类使用不同的protocol

Server

这里只看下simple的server

public static CalculatorHandler handler;public static Calculator.Processor processor;public static void simple(Calculator.Processor processor) {try {//自定义的实现handler = new CalculatorHandler();//注册handler到processor中processor = new Calculator.Processor(handler);//定义Socket通讯方式的ServerTransport(和TTransport不同)TServerTransport serverTransport = new TServerSocket(9090);//创建server,这里只注册了ServerTransport,TTransport和TProtocol都使用默认(TServerTransport对应的TTransport 和 TBinaryProtocol),并注册processorTServer server = new TSimpleServer(new Args(serverTransport).processor(processor));// 多线程server// TServer server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport).processor(processor));System.out.println("Starting the simple server...");//启动serverserver.serve();} catch (Exception e) {e.printStackTrace();}}

在server的serve方法中会监听TServerTransport,当接受到消息时会调用processor的各个方法的getResult方法进行处理,再写回结果。

转载于:https://www.cnblogs.com/resentment/p/7498713.html

Thrift Server与Client相关推荐

  1. java thrift client_使用thrift的java client调用python server

    上面这篇文章的例子是使用java client调用python server中的helloString方法来打印client传输过去的字符串 thrift文件,hello.thrift service ...

  2. 玩转Spring Cloud之配置中心(config server config client)

    玩转Spring Cloud之配置中心(config server &config client)  本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1 ...

  3. firefox+linux+nginx搭建server与client通过证书双向认证环境

    项目中需要搭建一个server和client基于证书的双向认证环境.由我来做,我也不会. 经过一晚上的研究,基本摸清了(知其然不知其所以然).做下笔记. 基本环境: 1.安装nginx. 2.安装op ...

  4. Load balancer does not have available server for client

    最近在研究spring-cloud,研究zuul组件时发生下列错误:  Caused by: com.netflix.client.ClientException: Load balancer doe ...

  5. JVM Server与Client运行模式

    为什么80%的码农都做不了架构师?>>>    JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很 ...

  6. SQL Server native client与sqlcmd单独安装

    背景 我有一台虚拟机,想要连接sql server,但是又不想安装sql server怎么办. 方案 sql server有专门的访问客户端叫做sql server native client,然后还 ...

  7. mysql client dev_ubuntu下mysql安装(server、client、dev),开启、停止和重启,及常见错误...

    1. 在ubuntu下安装server和client很简单: (1)安装server apt-get install mysql-server 安装当中,会提示输入root账户的密码,按提示输入即可. ...

  8. HTTP:HTTP的server and client详细攻略

    HTTP:HTTP的server and client详细攻略 目录 设计思路 HTTP的server and client术语解释 1.服务器端指response 2.客户端指request 3.H ...

  9. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

  10. mysql数据实时同步:Canal安装部署、kafka安装、zk安装、mysql安装、Canal Server+Canal Client HA,Canal+mysql+Kafka,相关验证(学习笔记)

    目录 Canal安装部署 1.1. 服务器准备 1.2. 设置主机名并配置hosts 1.3. 免密设置 1.4. 设置ntp时间 1.5. 关闭防火墙 1.6. 关闭selinux 1.7. 安装J ...

最新文章

  1. App 运营的指标具体都有哪些?(二)
  2. Windows Server 2003摆脱了恼人的Ctrl+Alt+Del
  3. Redis 数据库结构设计
  4. spring bean的初始化和销毁
  5. 【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】
  6. DoNet 高效开发必备开发工具
  7. PCB设计的基本步骤
  8. linux恢复终端默认配置,以gnome-terminal为例,修改gnome3 的默认配置,
  9. 前一天日期软件测试需求,软件测试实验日期前一天.doc
  10. Android页面传值b,android数据传递(一)之activityA传递到activityB
  11. 190611每日一句
  12. 推荐好书:《电子设计从零开始》
  13. 可道云 docker 群晖_利用群晖NAS同步文献
  14. json特殊符号 java_java 特殊符号转json出错
  15. 怎样进入国外的游戏行业工作?
  16. 管理员三权分立是什么意思?
  17. 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
  18. Windows 10打开远程桌面的方法
  19. USB OTG功能是什么意思?
  20. 求Sn = a + aa + aaa + ... + aa...a(n个a)之值,其中a是一个数字,n表示a的位数,n由键盘输入

热门文章

  1. 工作后,成长速度是如何产生差异的?
  2. mobomarket android,MoboMarket
  3. python pickle反序列化漏洞_渗透测试 - 黑客技术 | 【技术分享】记CTF比赛中发现的Python反序列化漏洞_吾爱漏洞...
  4. html5页面签字,html5 canvas实现的手机端签字板
  5. java单线程任务调度_一文详解Spring任务执行和调度(小结)
  6. flutter字体不跟随系统_Flutter小技巧总结之flutter 适配宽高,字体
  7. android 本地广播原理,本地广播原理
  8. mysql 取字符串首字母_MySQL通过函数获取字符串汉字拼音首字母大写字符串
  9. docker 卸载镜像_docker删除所有容器和镜像命令
  10. 探访蔚来合肥工厂:是ES8与ES6生产基地 能年产10万台