博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thrift Java实战
阅读量:6882 次
发布时间:2019-06-27

本文共 3944 字,大约阅读时间需要 13 分钟。

官网示例:

软件下载:

学习教程:

Thrift与其他传输方式的比较

xml与JSON相比体积太大,但是xml传统,也不算复杂。

json体积较小,新颖,但不够完善。

thrift体积超小,使用起来比较麻烦,不如前两者轻便,但是对于1.高并发、2.数据传输量大、3.多语言环境

socket是tcp网络层,http是应用层

1.编写IDL接口定义文件

namespace java org.acooly.thrift.demo.generalcode    struct Contact{      1:i32 id      2:string name      3:i64 birthday      4:string phoneNo      5:string ipAddress      6:map
 props  }    service ContactManager{    void save(1:Contact contact)    void remove(1:i32 id)    list
 getAll();    list
 query(1:map
 conditions)  }

2.生成代码

下载windows版本的thrift-0.9.1

thrift-0.9.1.exe   -r   --gen  java    thriftdemo.thrift    生成java 代码

thrift-0.9.1.exe   -r   --gen  php    thriftdemo.thrift    生成php代码

3.实现业务逻辑(也就是实现接口定义文件中service的方法)

package org.acooly.thrift.demo.server;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import java.util.Map;import org.acooly.thrift.demo.generalcode.Contact;import org.acooly.thrift.demo.generalcode.ContactManager;import org.apache.thrift.TException;public class ContactManagerImpl implements ContactManager.Iface{    public List
 getAll() throws TException {        List
 contacts = new ArrayList
();        contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));        return contacts;    }    public List
 query(Map
 conditions) throws TException {        List
 contacts = new ArrayList
();        contacts.add(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));        return contacts;    }    public void remove(int id) throws TException {        System.out.println("invoke: remove,id = " + id);    }    public void save(Contact contact) throws TException {        System.out.println("invoke: save,contact = " + contact);            }        }

4.编写服务器代码

package org.acooly.thrift.demo.server;import org.acooly.thrift.demo.generalcode.ContactManager;import org.acooly.thrift.demo.generalcode.ContactManager.Iface;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TCompactProtocol.Factory;import org.apache.thrift.server.TServer;import org.apache.thrift.server.TSimpleServer;import org.apache.thrift.server.TServer.Args;import org.apache.thrift.transport.TServerSocket;public class ThriftServer {    public static void main(String[] args) throws Exception{        TServerSocket serverSocket = new TServerSocket(8111);        ContactManager.Processor
 processor = new ContactManager.Processor
(new ContactManagerImpl());        Factory factory = new TCompactProtocol.Factory();        Args ag = new Args(serverSocket);        ag.outputProtocolFactory(factory);        ag.inputProtocolFactory(factory);        ag.processor(processor);        TServer server = new TSimpleServer(ag);        server.serve();    }    }

5.编写客户端代码

package org.acooly.thrift.demo.client;import java.util.Calendar;import java.util.List;import org.acooly.thrift.demo.generalcode.Contact;import org.acooly.thrift.demo.generalcode.ContactManager;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;public class ThriftClient {    public static void main(String[] args) throws Exception{                TTransport transport = new TSocket("localhost",8111);        TProtocol protocol = new TCompactProtocol(transport);        ContactManager.Client client = new ContactManager.Client(protocol);        transport.open();                List
 list = client.getAll();        System.out.println(list);                client.save(new Contact(1,"zhangpu",Calendar.getInstance().getTimeInMillis(),"1389612222","192.168.2.1",null));                client.remove(1);        transport.close();    }}

参考文章:

入门试用

Thrift网络服务模型

本文出自 “” 博客,请务必保留此出处

转载地址:http://ekbbl.baihongyu.com/

你可能感兴趣的文章
[译] Babel 7.0 带来的很酷的事情
查看>>
AntD 圣诞节彩蛋事件
查看>>
用 Vue 编写一个长按指令
查看>>
07 Javascript数据结构与算法 之 排序算法
查看>>
java程序员饱和了吗?
查看>>
Spring Boot(十四)RabbitMQ延迟队列
查看>>
Java 实现中文-拼音转换
查看>>
代码来构建一个简单的compiler
查看>>
第二十三章:SpringBoot项目多模块打包与部署
查看>>
BeanFactory
查看>>
Drafter: 一个在iOS项目中分析代码结构的工具
查看>>
eclipse intelli idea mac 的安装与配置
查看>>
[译] SQL 事务隔离实用指南
查看>>
动态代理的原理及其应用
查看>>
C++基础快速学习笔记(一)
查看>>
python-35-admin基本使用
查看>>
RestFul服务介绍
查看>>
不学无数——Mybatis解析判断表达式源码分析
查看>>
前端工程师必知之Promise的实现
查看>>
react简易实现(1) 组件的挂载
查看>>