thrift类似java里面的socket和sockchannel中server和client通信

thrift最重要的是跨语言,里面提供了序列化和反序列化、json和实体对象等方法

Apache Thrift软件框架(用于可扩展的跨语言服务开发)将软件堆栈与代码生成引擎结合在一起,
以构建可在C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi 
等语言

里面大概方法

图片转其他地方

thrift笔记----大体上thrift知识

 

 

 数据类型

bool:布尔值,对应 Java 的 boolean
byte8 位有符号整数,对应 Java 的 byte
i16:16 位有符号整数,对应 Java 的 short
i32:32 位有符号整数,对应 Java 的 int
i64:64 位有符号整数,对应 Java 的 long
double64 位浮点数,对应 Java 的 double
string:文本或二进制字符串,对应 Java 的 String
struct:定义公共的对象,在 Java 中是一个 JavaBean
list:对应 Java 的 ArrayList
set:对应 Java 的 HashSet
map:对应 Java 的 HashMap
exception:对应 Java 的 Exception
service:service 类型可以被继承
enum:枚举类型

 

maven导入jar

<dependency>
  <groupId>org.apache.thrift</groupId>
  <artifactId>libthrift</artifactId>
  <version>0.13.0</version>
</dependency>

 

 

新建thrift文件

(thrift命名例如UserService.thrift

namespace java com.test.libthrift.demo2
struct UserInfo{
     1:optional i32 id;
     2:optional string key;
     3:optional string value;
}
service UserService {
  bool isLogin(1:string username,2:string password)
  UserInfo setUserInfo(1:UserInfo user)
  string setStr(1:string str)
  list<UserInfo> setuserInfos(1:list<UserInfo> li)
}

生成接口

给客户端库和所编写的服务器使用,复制到服务端和客户端项目里

例如

thrift -r -gen java UserService.thrift

thrift --gen <语言> <Thrift 文件名>

 

序列化

                    TSerializer serializer = new TSerializer(new TSimpleJSONProtocol.Factory());
                    UserInfo user = new UserInfo();
                    user.setId(100);
                    user.setKey("key01");
                    user.setValue("value值");
                    String json = serializer.toString(user);

反序列

        TDeserializer deserializer = new TDeserializer(new TSimpleJSONProtocol.Factory());
        UserInfo base =new UserInfo();
        deserializer.deserialize(base, str,"UTF-8");

 

服务端实现接口

package com.test.libthrift.demo2;

import java.util.List;

import org.apache.thrift.TDeserializer;
import org.apache.thrift.TException;
import org.apache.thrift.protocol.TSimpleJSONProtocol;

public class UserServiceImpl implements UserService.Iface{

    @Override
    public boolean isLogin(String username, String password) throws TException {
        // TODO Auto-generated method stub
        System.out.println("收到客户端:"+username+"---"+password);
        if(username==null ||password==null) return false;
        if("lyx".equals(username)&&"123456".equals(password)) return true;
        
        return false;
    }

    @Override
    public UserInfo setUserInfo(UserInfo user) throws TException {
        // TODO Auto-generated method stub
        System.out.println("收到客户端UserInfo:"+user.toString());
        return user;
    }

    @Override
    public String setStr(String str) throws TException {
        // TODO Auto-generated method stub
        System.out.println("收到客户端str:"+str);

        TDeserializer deserializer = new TDeserializer(new TSimpleJSONProtocol.Factory());
        UserInfo base =new UserInfo();
        deserializer.deserialize(base, str,"UTF-8");
        System.out.println("反序列化:"+base.toString());
        return str;
    }

    @Override
    public List<UserInfo> setuserInfos(List<UserInfo> li) throws TException {
        // TODO Auto-generated method stub
        System.out.println("收到客户端LIST:");
        for(UserInfo u : li){
            System.out.println(u.toString());
        }
        return li;
    }


}
View Code

相关文章: