RPC_PROTOBUL实例
RPC_PROTOBUL范例1.下载与安装 官方网站:http://code.google.com/p/protobuf/ 下载地址:http://protobuf
RPC_PROTOBUL范例
1.下载与安装
官方网站:http://code.google.com/p/protobuf/
下载地址:http://protobuf.googlecode.com/files/protobuf-2.4.1.tar.bz2
protocol buffers并没有实现RPC通信,可以使用第三方的RPC实现protobuf-socket-rpc,下载地址是:http://protobuf-socket-rpc.googlecode.com/files/protobuf-socket-rpc-2.0.jar
package protobuf; ?import?protobuf.MessageProtos.Message; import?protobuf.MessageProtos.MessageService; import?protobuf.MessageProtos.MessageService.BlockingInterface; ?import?com.google.protobuf.BlockingRpcChannel; import?com.google.protobuf.ByteString; import?com.google.protobuf.RpcController; import?com.google.protobuf.ServiceException; import?com.googlecode.protobuf.socketrpc.RpcChannels; import?com.googlecode.protobuf.socketrpc.RpcConnectionFactory; import?com.googlecode.protobuf.socketrpc.SocketRpcConnectionFactories; import?com.googlecode.protobuf.socketrpc.SocketRpcController; ?public?class Client { ? ? private?int port; ? ? private?String host; ? ? private?int size; ? ? private?int count; ?? ? public?Client(int port, String host, int size, int count) { ? ? ? ? super(); ? ? ? ? this.port = port; ? ? ? ? this.host = host; ? ? ? ? this.size = size; ? ? ? ? this.count = count; ? ? } ?? ? public?long run() { ? ? ? ? // Create channel ? ? ? ? RpcConnectionFactory?connectionFactory = SocketRpcConnectionFactories ? ? ? ? ? ? ? ? .createRpcConnectionFactory(host, port); ? ? ? ? BlockingRpcChannel?channel = RpcChannels ? ? ? ? ? ? ? ? .newBlockingRpcChannel(connectionFactory); ?? ? ? ? // Call service ? ? ? ? BlockingInterface?service = MessageService.newBlockingStub(channel); ? ? ? ? RpcController?controller = new SocketRpcController(); ? ? ? ? Message.Builder?message = Message.newBuilder(); ? ? ? ? // initiate the message ? ? ? ? …?? ? ? ? long?start = 0; ? ? ? ? long?end = 0; ? ? ? ? try?{ ? ? ? ? ? ? start = System.currentTimeMillis(); ? ? ? ? ? ? for?(int i = 0; i < count; i++) { ? ? ? ? ? ? ? ? service.getMessage(controller, message.build()); ? ? ? ? ? ? } ? ? ? ? ? ? end = System.currentTimeMillis(); ? ? ? ? ? ? System.out.println(end - start); ? ? ? ? }?catch (ServiceException e) { ? ? ? ? ? ? e.printStackTrace(); ? ? ? ? } ?? ? ? ? // Check success ? ? ? ? if?(controller.failed()) { ? ? ? ? ? ? System.err.println(String.format("Rpc failed %s : %s", ? ? ? ? ? ? ? ? ? ? ((SocketRpcController)?controller).errorReason(), ? ? ? ? ? ? ? ? ? ? controller.errorText())); ? ? ? ? } ?? ? ? ? return?end - start; ? ? } ?? ? public?static void main(String[] args) { ? ? ? ? if?(args.length != 4) { ? ? ? ? ? ? System.out.println("Usage: Client host port dataSize count"); ? ? ? ? ? ? return; ? ? ? ? } ? ? ? ? String?host = args[0]; ? ? ? ? int?port = Integer.parseInt(args[1]); ? ? ? ? int?size = Integer.parseInt(args[2]); ? ? ? ? int?count = Integer.parseInt(args[3]); ?? ? ? ? new?Client(port, host, size, count).run(); ? ? } }5.参考资料
(1) Protocol Buffers Documentation: http://code.google.com/apis/protocolbuffers/docs/overview.html