//简单的单线程服务模型
import org.apache.thrift.TException;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TSimpleServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
public class HelloTSimpleServer {
public static final int SERVER_PORT = 8080;
public void startServer() throws TTransportException {
TProcessor tprocessor = new Hello.Processor<>(new HelloImpl());
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TServer.Args tArgs = new TServer.Args(serverTransport);
tArgs.processor(tprocessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
TServer server = new TSimpleServer(tArgs);
System.out.println("init...");
server.serve();
}
public static void main(String[] args) throws TException {
HelloTSimpleServer hss = new HelloTSimpleServer();
hss.startServer();
}
}
import org.apache.thrift.TException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;public class HelloClient { public static final String SERVER_IP = "127.0.0.1"; public static final int SERVER_PORT = 8080; public static final int TIMEOUT = 30000; public static void main(String[] args) throws TException { // 设置传输通道 TTransport transport = new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT); // 协议要和服务端一致 // 使用二进制协议 TProtocol protocol = new TBinaryProtocol(transport); // 创建Client Hello.Client client = new Hello.Client(protocol); transport.open(); String result = client.helloString("111"); System.out.println("result : " + result); // 关闭资源 transport.close(); }}
//线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。
import org.apache.thrift.TException;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TTransportException;
public class HelloTThreadPoolServer {
public static final int SERVER_PORT = 8080;
public void startServer() throws TTransportException {
TProcessor tprocessor = new Hello.Processor<>(new HelloImpl());
TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
TThreadPoolServer.Args tArgs = new TThreadPoolServer.Args(
serverTransport);
tArgs.processor(tprocessor);
tArgs.protocolFactory(new TBinaryProtocol.Factory());
TThreadPoolServer ttps = new TThreadPoolServer(tArgs);
System.out.println("init...");
ttps.serve();
}
public static void main(String[] args) throws TException {
HelloTThreadPoolServer hss = new HelloTThreadPoolServer();
hss.startServer();
}
}
客户端不变
//使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。
import org.apache.thrift.TException;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.TNonblockingServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TTransportException;
public class HelloTNonblockingServer {
public static final int SERVER_PORT = 8080;
public void startServer() throws TTransportException {
TProcessor tprocessor = new Hello.Processor<>(new HelloImpl());
TNonblockingServerSocket tnbServerTransport = new TNonblockingServerSocket(
SERVER_PORT);
TNonblockingServer.Args tArgs = new TNonblockingServer.Args(
tnbServerTransport);
tArgs.processor(tprocessor);
tArgs.transportFactory(new TFramedTransport.Factory());
tArgs.protocolFactory(new TCompactProtocol.Factory());
TServer ttps = new TNonblockingServer(tArgs);
System.out.println("init...");
ttps.serve();
}
public static void main(String[] args) throws TException {
HelloTNonblockingServer hss = new HelloTNonblockingServer();
hss.startServer();
}
}
import org.apache.thrift.TException;import org.apache.thrift.protocol.TCompactProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;public class HelloClient { public static final String SERVER_IP = "127.0.0.1"; public static final int SERVER_PORT = 8080; public static final int TIMEOUT = 30000; public static void main(String[] args) throws TException { // 设置传输通道 TTransport transport = new TFramedTransport(new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT)); // 协议要和服务端一致 // 使用二进制协议 TProtocol protocol = new TCompactProtocol(transport); // 创建Client Hello.Client client = new Hello.Client(protocol); transport.open(); String result = client.helloString("111"); System.out.println("result : " + result); // 关闭资源 transport.close(); }}
//半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。
import org.apache.thrift.TException;
import org.apache.thrift.TProcessor;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TTransportException;
public class HelloTHsHaServer {
public static final int SERVER_PORT = 8080;
public void startServer() throws TTransportException {
TProcessor tprocessor = new Hello.Processor<>(new HelloImpl());
TNonblockingServerSocket tnbServerTransport = new TNonblockingServerSocket(
SERVER_PORT);
THsHaServer.Args tArgs = new THsHaServer.Args(tnbServerTransport);
tArgs.processor(tprocessor);
tArgs.transportFactory(new TFramedTransport.Factory());
tArgs.protocolFactory(new TBinaryProtocol.Factory());
TServer ttps = new THsHaServer(tArgs);
System.out.println("init...");
ttps.serve();
}
public static void main(String[] args) throws TException {
HelloTHsHaServer hss = new HelloTHsHaServer();
hss.startServer();
}
}
import org.apache.thrift.TException;import org.apache.thrift.protocol.TBinaryProtocol;import org.apache.thrift.protocol.TProtocol;import org.apache.thrift.transport.TFramedTransport;import org.apache.thrift.transport.TSocket;import org.apache.thrift.transport.TTransport;public class HelloClient { public static final String SERVER_IP = "127.0.0.1"; public static final int SERVER_PORT = 8080; public static final int TIMEOUT = 30000; public static void main(String[] args) throws TException { // 设置传输通道 TTransport transport = new TFramedTransport(new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT)); // 协议要和服务端一致 // 使用二进制协议 TProtocol protocol = new TBinaryProtocol(transport); // 创建Client Hello.Client client = new Hello.Client(protocol); transport.open(); String result = client.helloString("111"); System.out.println("result : " + result); // 关闭资源 transport.close(); }}