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不多加阐述