public static void main(String[] args) throws Exception { if (args.length != 2) { System.out.println("usage: VisClient <server> <port>"); System.exit(-1); } String serv = args[0]; int port = Integer.parseInt(args[1]); PeerInfo server = new PeerInfo(serv, port); DuplexTcpClientPipelineFactory clientFactory = new DuplexTcpClientPipelineFactory(); // in case client acts as server, which is the reason behind a duplex // connection indeed. RpcServerCallExecutor executor = new ThreadPoolCallExecutor(3, 100); clientFactory.setRpcServerCallExecutor(executor); clientFactory.setConnectResponseTimeoutMillis(1000); // clientFactory.getRpcServiceRegistry().registerService(); Bootstrap bootstrap = new Bootstrap(); bootstrap.group(new NioEventLoopGroup()); bootstrap.handler(clientFactory); bootstrap.channel(NioSocketChannel.class); bootstrap.option(ChannelOption.TCP_NODELAY, true); bootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000); bootstrap.option(ChannelOption.SO_SNDBUF, 1048576); bootstrap.option(ChannelOption.SO_RCVBUF, 1048576); RpcClientChannel channel = clientFactory.peerWith(server, bootstrap); BlockingInterface visService = ProtoFrame.FrameServerService.newBlockingStub(channel); RpcController cntr = channel.newRpcController(); clientFactory .getRpcServiceRegistry() .registerService( ProtoFrame.FrameServerService.newReflectiveBlockingService( new BlockingVisServiceImpl(null, null))); new CASimVisClient(visService, cntr).run(); // // channel.close(); // executor.shutdown(); // System.exit(0); }
@Test(dependsOnGroups = "example.ipc.server") public void clientTest() throws IOException, ServiceException, InterruptedException { PeerInfo client = new PeerInfo(socketAddress.getHostName(), 1234); ThreadPoolCallExecutor executor = new ThreadPoolCallExecutor(3, 10); DuplexTcpClientBootstrap bootstrap = new DuplexTcpClientBootstrap( client, new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool()), executor); bootstrap.setOption("connectTimeoutMillis", 10000); bootstrap.setOption("connectResponseTimeoutMillis", 10000); bootstrap.setOption("receiveBufferSize", 1048576); bootstrap.setOption("tcpNoDelay", false); RpcClientChannel channel = bootstrap.peerWith(socketAddress); // blocking calll DataService.BlockingInterface dataService = DataService.newBlockingStub(channel); RpcController controller = channel.newRpcController(); // make request GetRequest request = GetRequest.newBuilder().setRow(ByteString.copyFromUtf8("row1")).build(); final Stopwatch stopwatch = new Stopwatch().start(); GetResponse response = dataService.getData(controller, request); stopwatch.stop(); System.out.println(response.getDataList()); System.out.printf("Request took %s milliseconds\n", stopwatch.elapsedMillis()); // do it again since the socket is open stopwatch.reset().start(); response = dataService.getData(controller, request); stopwatch.stop(); System.out.println(response.getDataList()); System.out.printf("Request took %s milliseconds\n", stopwatch.elapsedMillis()); // non-blocking DataService.Stub stub = DataService.newStub(channel); final Object lock = new Object(); stopwatch.reset().start(); stub.getData( controller, request, new RpcCallback<GetResponse>() { public void run(final GetResponse parameter) { System.out.println("Non-Blocking Callback"); System.out.println(parameter.getDataList()); stopwatch.stop(); System.out.printf("Request took %s milliseconds\n", stopwatch.elapsedMillis()); synchronized (lock) { lock.notify(); } } }); synchronized (lock) { lock.wait(); } }