Thrift Server与Client
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相关推荐
- java thrift client_使用thrift的java client调用python server
上面这篇文章的例子是使用java client调用python server中的helloString方法来打印client传输过去的字符串 thrift文件,hello.thrift service ...
- 玩转Spring Cloud之配置中心(config server config client)
玩转Spring Cloud之配置中心(config server &config client) 本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1 ...
- firefox+linux+nginx搭建server与client通过证书双向认证环境
项目中需要搭建一个server和client基于证书的双向认证环境.由我来做,我也不会. 经过一晚上的研究,基本摸清了(知其然不知其所以然).做下笔记. 基本环境: 1.安装nginx. 2.安装op ...
- Load balancer does not have available server for client
最近在研究spring-cloud,研究zuul组件时发生下列错误: Caused by: com.netflix.client.ClientException: Load balancer doe ...
- JVM Server与Client运行模式
为什么80%的码农都做不了架构师?>>> JVM Server模式与client模式启动,最主要的差别在于:-Server模式启动时,速度较慢,但是一旦运行起来后,性能将会有很 ...
- SQL Server native client与sqlcmd单独安装
背景 我有一台虚拟机,想要连接sql server,但是又不想安装sql server怎么办. 方案 sql server有专门的访问客户端叫做sql server native client,然后还 ...
- mysql client dev_ubuntu下mysql安装(server、client、dev),开启、停止和重启,及常见错误...
1. 在ubuntu下安装server和client很简单: (1)安装server apt-get install mysql-server 安装当中,会提示输入root账户的密码,按提示输入即可. ...
- HTTP:HTTP的server and client详细攻略
HTTP:HTTP的server and client详细攻略 目录 设计思路 HTTP的server and client术语解释 1.服务器端指response 2.客户端指request 3.H ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...
- 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 ...
最新文章
- App 运营的指标具体都有哪些?(二)
- Windows Server 2003摆脱了恼人的Ctrl+Alt+Del
- Redis 数据库结构设计
- spring bean的初始化和销毁
- 【pyinstaller打包pyqt5编写的项目为exe(脱离环境可运行)】
- DoNet 高效开发必备开发工具
- PCB设计的基本步骤
- linux恢复终端默认配置,以gnome-terminal为例,修改gnome3 的默认配置,
- 前一天日期软件测试需求,软件测试实验日期前一天.doc
- Android页面传值b,android数据传递(一)之activityA传递到activityB
- 190611每日一句
- 推荐好书:《电子设计从零开始》
- 可道云 docker 群晖_利用群晖NAS同步文献
- json特殊符号 java_java 特殊符号转json出错
- 怎样进入国外的游戏行业工作?
- 管理员三权分立是什么意思?
- 服务器怎么设置自动连接wifi,笔记本无线网络连接IP地址设置(自动获取IP)
- Windows 10打开远程桌面的方法
- USB OTG功能是什么意思?
- 求Sn = a + aa + aaa + ... + aa...a(n个a)之值,其中a是一个数字,n表示a的位数,n由键盘输入
热门文章
- 工作后,成长速度是如何产生差异的?
- mobomarket android,MoboMarket
- python pickle反序列化漏洞_渗透测试 - 黑客技术 | 【技术分享】记CTF比赛中发现的Python反序列化漏洞_吾爱漏洞...
- html5页面签字,html5 canvas实现的手机端签字板
- java单线程任务调度_一文详解Spring任务执行和调度(小结)
- flutter字体不跟随系统_Flutter小技巧总结之flutter 适配宽高,字体
- android 本地广播原理,本地广播原理
- mysql 取字符串首字母_MySQL通过函数获取字符串汉字拼音首字母大写字符串
- docker 卸载镜像_docker删除所有容器和镜像命令
- 探访蔚来合肥工厂:是ES8与ES6生产基地 能年产10万台