Thrift 非阻塞式IO服务模型-TNonblockingServer

来源:互联网 发布:漫画上色软件 编辑:程序博客网 时间:2024/06/11 23:45

使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。

服务端HelloTNonblockingServer.java:

package cn.slimsmart.thrift.demo.helloworld;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;/** * 注册服务端 * 使用非阻塞式IO,服务端和客户端需要指定 TFramedTransport 数据传输的方式。 TNonblockingServer   */public class HelloTNonblockingServer {// 注册端口public static final int SERVER_PORT = 8080;public static void main(String[] args) throws TException {//处理器TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldImpl());// 传输通道 - 非阻塞方式  TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);//异步IO,需要使用TFramedTransport,它将分块缓存读取。  TNonblockingServer.Args tArgs = new TNonblockingServer.Args(serverTransport);tArgs.processor(tprocessor);tArgs.transportFactory(new TFramedTransport.Factory());//使用高密度二进制协议 tArgs.protocolFactory(new TCompactProtocol.Factory());// 使用非阻塞式IO,服务端和客户端需要指定TFramedTransport数据传输的方式TServer server = new TNonblockingServer(tArgs);System.out.println("HelloTNonblockingServer start....");server.serve(); // 启动服务}}
客户端HelloNonblockingClient.java

package cn.slimsmart.thrift.demo.helloworld;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;/** * 客户端调用HelloTNonblockingServer,HelloTHsHaServer * 非阻塞 */public class HelloNonblockingClient {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 {//设置传输通道,对于非阻塞服务,需要使用TFramedTransport,它将数据分块发送  TTransport transport = new TFramedTransport(new TSocket(SERVER_IP, SERVER_PORT, TIMEOUT));// 协议要和服务端一致//HelloTNonblockingServer////使用高密度二进制协议 TProtocol protocol = new TCompactProtocol(transport);//HelloTHsHaServer////使用二进制协议 //TProtocol protocol = new TBinaryProtocol(transport);HelloWorld.Client client = new HelloWorld.Client(protocol);transport.open();String result = client.sayHello("jack");System.out.println("result : " + result);//关闭资源transport.close();}}

0 0
原创粉丝点击