/nfs-rpc-common/src/main/java/code/google/nfs/rpc/benchmark/AbstractBenchmarkServer.java

http://nfs-rpc.googlecode.com/ · Java · 80 lines · 54 code · 9 blank · 17 comment · 4 complexity · b55dd8ecff468357d4d91292d061ba38 MD5 · raw file

  1. package code.google.nfs.rpc.benchmark;
  2. /**
  3. * nfs-rpc
  4. * Apache License
  5. *
  6. * http://code.google.com/p/nfs-rpc (c) 2011
  7. */
  8. import java.text.SimpleDateFormat;
  9. import java.util.Date;
  10. import java.util.concurrent.ExecutorService;
  11. import java.util.concurrent.SynchronousQueue;
  12. import java.util.concurrent.ThreadFactory;
  13. import java.util.concurrent.ThreadPoolExecutor;
  14. import java.util.concurrent.TimeUnit;
  15. import code.google.nfs.rpc.NamedThreadFactory;
  16. import code.google.nfs.rpc.protocol.PBDecoder;
  17. import code.google.nfs.rpc.protocol.RPCProtocol;
  18. import code.google.nfs.rpc.protocol.SimpleProcessorProtocol;
  19. import code.google.nfs.rpc.server.Server;
  20. import code.google.nfs.rpc.server.ServerProcessor;
  21. import com.google.protobuf.ByteString;
  22. /**
  23. * Abstract benchmark server
  24. *
  25. * Usage: BenchmarkServer listenPort maxThreads responseSize
  26. *
  27. * @author <a href="mailto:bluedavy@gmail.com">bluedavy</a>
  28. */
  29. public abstract class AbstractBenchmarkServer {
  30. private static final SimpleDateFormat dateFormat = new SimpleDateFormat(
  31. "yyyy-MM-dd HH:mm:ss");
  32. public void run(String[] args) throws Exception {
  33. if (args == null || args.length != 3) {
  34. throw new IllegalArgumentException(
  35. "must give three args: listenPort | maxThreads | responseSize");
  36. }
  37. int listenPort = Integer.parseInt(args[0]);
  38. int maxThreads = Integer.parseInt(args[1]);
  39. final int responseSize = Integer.parseInt(args[2]);
  40. System.out.println(dateFormat.format(new Date())
  41. + " ready to start server,listenPort is: " + listenPort
  42. + ",maxThreads is:" + maxThreads + ",responseSize is:"
  43. + responseSize + " bytes");
  44. Server server = getServer();
  45. server.registerProcessor(SimpleProcessorProtocol.TYPE,RequestObject.class.getName(), new ServerProcessor() {
  46. public Object handle(Object request) throws Exception {
  47. return new ResponseObject(responseSize);
  48. }
  49. });
  50. // for pb codec
  51. PBDecoder.addMessage(PB.RequestObject.class.getName(), PB.RequestObject.getDefaultInstance());
  52. PBDecoder.addMessage(PB.ResponseObject.class.getName(), PB.ResponseObject.getDefaultInstance());
  53. server.registerProcessor(SimpleProcessorProtocol.TYPE,PB.RequestObject.class.getName(), new ServerProcessor() {
  54. public Object handle(Object request) throws Exception {
  55. PB.ResponseObject.Builder builder = PB.ResponseObject.newBuilder();
  56. builder.setBytesObject(ByteString.copyFrom(new byte[responseSize]));
  57. return builder.build();
  58. }
  59. });
  60. server.registerProcessor(RPCProtocol.TYPE, "testservice", new BenchmarkTestServiceImpl(responseSize));
  61. server.registerProcessor(RPCProtocol.TYPE, "testservicepb", new PBBenchmarkTestServiceImpl(responseSize));
  62. ThreadFactory tf = new NamedThreadFactory("BUSINESSTHREADPOOL");
  63. ExecutorService threadPool = new ThreadPoolExecutor(20, maxThreads,
  64. 300, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(), tf);
  65. server.start(listenPort, threadPool);
  66. }
  67. /**
  68. * Get server instance
  69. */
  70. public abstract Server getServer();
  71. }