001: package org.jgroups.tests;
002:
003: import org.jgroups.*;
004: import org.jgroups.blocks.GroupRequest;
005: import org.jgroups.blocks.MessageDispatcher;
006: import org.jgroups.blocks.RequestHandler;
007: import org.jgroups.util.Util;
008:
009: /**
010: * @author Bela Ban
011: * @version $Id: MessageDispatcherSpeedTest.java,v 1.1 2005/07/22 10:30:21 belaban Exp $
012: */
013: public class MessageDispatcherSpeedTest implements MembershipListener,
014: RequestHandler {
015: Channel channel;
016: MessageDispatcher disp;
017: String props = null;
018: boolean server = false; // role is client by default
019: int num = 1000, received = 0;
020: static final long TIMEOUT = 10000;
021:
022: public MessageDispatcherSpeedTest(String props, boolean server,
023: int num) {
024: this .props = props;
025: this .server = server;
026: this .num = num;
027: }
028:
029: public Object handle(Message msg) {
030: received++;
031: if (received % 1000 == 0)
032: System.out.println("-- received " + received);
033: return null;
034: }
035:
036: public void start() throws Exception {
037: channel = new JChannel(props);
038: // channel.setOpt(Channel.LOCAL, Boolean.FALSE); // do not receive my own messages
039: disp = new MessageDispatcher(channel, null, this , this , false);
040: channel.connect("MessageDispatcherSpeedTestGroup");
041:
042: try {
043: if (server) {
044: System.out
045: .println("-- Started as server. Press ctrl-c to kill");
046: while (true) {
047: Util.sleep(10000);
048: }
049: } else {
050: sendMessages(num);
051: }
052: } catch (Throwable t) {
053: t.printStackTrace(System.err);
054: } finally {
055: channel.close();
056: disp.stop();
057: }
058: }
059:
060: void sendMessages(int num) throws Exception {
061: long start, stop;
062: int show = num / 10;
063:
064: if (show <= 0)
065: show = 1;
066: start = System.currentTimeMillis();
067:
068: System.out.println("-- sending " + num + " messages");
069: for (int i = 1; i <= num; i++) {
070: disp.castMessage(null, new Message(), GroupRequest.GET_ALL,
071: TIMEOUT);
072: if (i % show == 0)
073: System.out.println("-- sent " + i);
074: }
075: stop = System.currentTimeMillis();
076: printStats(stop - start, num);
077: }
078:
079: void printStats(long total_time, int num) {
080: double throughput = ((double) num)
081: / ((double) total_time / 1000.0);
082: System.out.println("time for " + num + " remote calls was "
083: + total_time + ", avg=" + (total_time / (double) num)
084: + "ms/invocation, " + (long) throughput + " calls/sec");
085: }
086:
087: public void viewAccepted(View new_view) {
088: System.out.println("-- new view: " + new_view);
089: }
090:
091: public void suspect(Address suspected_mbr) {
092: ;
093: }
094:
095: public void block() {
096: ;
097: }
098:
099: public static void main(String[] args) {
100: String props = null;
101: boolean server = false;
102: int num = 1000;
103: MessageDispatcherSpeedTest test;
104:
105: for (int i = 0; i < args.length; i++) {
106: if ("-props".equals(args[i])) {
107: props = args[++i];
108: continue;
109: }
110: if ("-server".equals(args[i])) {
111: server = true;
112: continue;
113: }
114: if ("-num".equals(args[i])) {
115: num = Integer.parseInt(args[++i]);
116: continue;
117: }
118: help();
119: return;
120: }
121:
122: try {
123: test = new MessageDispatcherSpeedTest(props, server, num);
124: test.start();
125: } catch (Exception e) {
126: System.err.println(e);
127: }
128: }
129:
130: static void help() {
131: System.out
132: .println("RpcDispatcherSpeedTest [-help] [-props <props>] [-server] [-num <number of calls>]");
133: }
134:
135: }
|