Client的开发顺序为:
1、定义Tsocket
2、将Socket包装到Transport(记得Transport要open() )
3、将Transport包装进Protocol
4、将Protocol包装到Client
5、调用Client的函数
6、最后关闭Transport
总之,Client就是“一步一步包进去“的过程:
<span style="white-space:pre"> </span>//定义一个Socket
TSocket socket=new TSocket("localhost", 8888);
//定义一个transport层,这里使用NIOtransport
TTransport transport=new TFramedTransport(socket);
//打开transport层!!!!!!!
transport.open();
//定义一个protocol层,这里使用BinaryProtocol
TProtocol protocol=new TBinaryProtocol(transport);
//(客户端缺了个Processor层),所以不用定义
//定义client
Echo.Client client=new Echo.Client(protocol);
//调用client,使用client的函数
System.out.println(client.getEcho("Hello World!"));
//关闭client
transport.close();
Server的开发顺序为:
1、实现service的Iface,生成Handler
2、将Handler包装到Processor
3、定义一个ServerSocket
4、将ServerSocket包装到Server.Args对象中
5、使用“搭积木”的方式不断搭建args(Server的参数),包括Processor,Protocol,Transport等
6、最后将Args包装进Server
7、启动Server
总之,Server采用“填参数”的方法搭建起来:
<span style="white-space:pre"> </span>//定义一个Processor层,包装Handler
Echo.Processor processer=new Processor(new EchoHandler());
//定义一个ServerSocket
TNonblockingServerSocket serverSocket=new TNonblockingServerSocket(8888);
//定义一个服务器参数对象,包装Socket
// 单线程nio模式
// TNonblockingServer.Args serverArgs=new TNonblockingServer.Args(serverSocket);
// one selector,n worker模式
// THsHaServer.Args serverArgs=new THsHaServer.Args(serverSocket);
// n selector ,n worker模式
TThreadedSelectorServer.Args serverArgs=new TThreadedSelectorServer.Args(serverSocket);
//参数对象使用连续搭建模式,搭建出processor层,protocol层,和Transport层
serverArgs.processor(processer)
.protocolFactory(new TBinaryProtocol.Factory())
.transportFactory(new TFramedTransport.Factory())
.workerThreads(8)//Hsha和ThreadSelector特有的参数
.selectorThreads(2);//ThreadSelector特有的参数
//创建Server,传进参数对象
// TServer server=new TNonblockingServer(serverArgs);
// THsHaServer server =new THsHaServer(serverArgs);
TThreadedSelectorServer server=new TThreadedSelectorServer(serverArgs);
//启动Server
System.out.println("server start...");
server.serve();
注意:使用NIO模式时都要使用TFramedTransport,BIO不多加阐述