synchronousmessagespeedtest.java

来自「JGRoups源码」· Java 代码 · 共 150 行

JAVA
150
字号
package org.jgroups.tests;import org.jgroups.Channel;import org.jgroups.JChannel;import org.jgroups.Message;/** * Tests the time to multicast a message to everyone and then receive the responses * @author Bela Ban * @version $Id: SynchronousMessageSpeedTest.java,v 1.1 2005/07/22 10:30:21 belaban Exp $ */public class SynchronousMessageSpeedTest {    Channel             channel;    String              props=null;    boolean             server=false; // role is client by default    int                 num=1000, received=0;    static final long   TIMEOUT=10000;    public SynchronousMessageSpeedTest(String props, boolean server, int num) {        this.props=props;        this.server=server;        this.num=num;    }    public void start() throws Exception {        Object obj;        Message msg;        channel=new JChannel(props);        channel.setOpt(Channel.LOCAL, Boolean.FALSE); // do *not* receive my own messages        channel.connect("MessageDispatcherSpeedTestGroup");        try {            while(channel.getNumMessages() > 0)                channel.receive(10); // clear the input queue            if(server) {                System.out.println("-- Started as server. Press ctrl-c to kill");                int i=0;                while(true) {                    obj=channel.receive(0);                    if(obj instanceof Message) {                        msg=(Message)obj;                        Message rsp=new Message(msg.getSrc(), null, null);                        if(++received % 1000 == 0)                            System.out.println("-- received " + received);                        channel.send(rsp);                    }                }            }            else {                sendMessages(num);            }        }        catch(Throwable t) {            t.printStackTrace(System.err);        }        finally {            channel.close();        }    }    void sendMessages(int num) throws Exception {        long    start, stop;        int     show=num/10;        Object  obj;        if(show <=0) show=1;        start=System.currentTimeMillis();        System.out.println("-- sending " + num + " messages");        for(int i=1; i <= num; i++) {            channel.send(new Message());            if(i % show == 0)                System.out.println("-- sent " + i);            while(true) {                obj=channel.receive(0);                if(obj instanceof Message) {                    received++;                    if(received % show == 0)                        System.out.println("-- received response: " + received);                    break;                }            }        }        stop=System.currentTimeMillis();        printStats(stop-start, num);    }    void printStats(long total_time, int num) {        double throughput=((double)num)/((double)total_time/1000.0);        System.out.println("time for " + num + " remote calls was " +                           total_time + ", avg=" + (total_time / (double)num) +                           "ms/invocation, " + (long)throughput + " calls/sec");    }    public static void main(String[] args) {        String                 props=null;        boolean                server=false;        int                    num=1000;        SynchronousMessageSpeedTest test;        for(int i=0; i < args.length; i++) {            if("-props".equals(args[i])) {                props=args[++i];                continue;            }            if("-server".equals(args[i])) {                server=true;                continue;            }            if("-num".equals(args[i])) {                num=Integer.parseInt(args[++i]);                continue;            }            help();            return;        }        try {            test=new SynchronousMessageSpeedTest(props, server, num);            test.start();        }        catch(Exception e) {            System.err.println(e);        }    }    static void help() {        System.out.println("RpcDispatcherSpeedTest [-help] [-props <props>] [-server] [-num <number of calls>]");    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?