Search in sources :

Example 6 with NioSender

use of org.apache.catalina.tribes.transport.nio.NioSender in project tomcat70 by apache.

the class SocketNioSend method main.

public static void main(String[] args) throws Exception {
    Selector selector;
    synchronized (Selector.class) {
        // Selector.open() isn't thread safe
        // http://bugs.sun.com/view_bug.do?bug_id=6427854
        // Affects 1.6.0_29, fixed in 1.7.0_01
        selector = Selector.open();
    }
    Member mbr = new MemberImpl("localhost", 9999, 0);
    ChannelData data = new ChannelData();
    data.setOptions(Channel.SEND_OPTIONS_BYTE_MESSAGE);
    data.setAddress(mbr);
    byte[] buf = new byte[8192 * 4];
    data.setMessage(new XByteBuffer(buf, false));
    buf = XByteBuffer.createDataPackage(data);
    int len = buf.length;
    BigDecimal total = new BigDecimal((double) 0);
    BigDecimal bytes = new BigDecimal((double) len);
    NioSender sender = new NioSender();
    sender.setDestination(mbr);
    sender.setDirectBuffer(true);
    sender.setSelector(selector);
    sender.setTxBufSize(1024 * 1024);
    sender.connect();
    sender.setMessage(buf);
    System.out.println("Writing to 9999");
    long start = 0;
    double mb = 0;
    boolean first = true;
    int count = 0;
    DecimalFormat df = new DecimalFormat("##.00");
    while (count < 100000) {
        if (first) {
            first = false;
            start = System.currentTimeMillis();
        }
        sender.setMessage(buf);
        int selectedKeys = 0;
        try {
            selectedKeys = selector.select(0);
        } catch (Exception e) {
            e.printStackTrace();
            continue;
        }
        if (selectedKeys == 0) {
            continue;
        }
        Iterator<SelectionKey> it = selector.selectedKeys().iterator();
        while (it.hasNext()) {
            SelectionKey sk = it.next();
            it.remove();
            try {
                int readyOps = sk.readyOps();
                sk.interestOps(sk.interestOps() & ~readyOps);
                if (sender.process(sk, false)) {
                    total = total.add(bytes);
                    sender.reset();
                    sender.setMessage(buf);
                    mb += ((double) len) / 1024 / 1024;
                    if (((++count) % 10000) == 0) {
                        long time = System.currentTimeMillis();
                        double seconds = ((double) (time - start)) / 1000;
                        System.out.println("Throughput " + df.format(mb / seconds) + " MB/seconds, total " + mb + " MB, total " + total + " bytes.");
                    }
                }
            } catch (Throwable t) {
                t.printStackTrace();
                return;
            }
        }
        selector.selectedKeys().clear();
    }
    System.out.println("Complete, sleeping 15 seconds");
    Thread.sleep(15000);
}
Also used : SelectionKey(java.nio.channels.SelectionKey) XByteBuffer(org.apache.catalina.tribes.io.XByteBuffer) NioSender(org.apache.catalina.tribes.transport.nio.NioSender) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl) DecimalFormat(java.text.DecimalFormat) BigDecimal(java.math.BigDecimal) ChannelData(org.apache.catalina.tribes.io.ChannelData) Member(org.apache.catalina.tribes.Member) Selector(java.nio.channels.Selector)

Example 7 with NioSender

use of org.apache.catalina.tribes.transport.nio.NioSender in project tomcat by apache.

the class NioSenderTest method init.

public void init() throws Exception {
    selector = Selector.open();
    mbr = new MemberImpl("localhost", 4444, 0);
    NioSender sender = new NioSender();
    sender.setDestination(mbr);
    sender.setDirectBuffer(true);
    sender.setSelector(selector);
    sender.setMessage(XByteBuffer.createDataPackage(getMessage(mbr)));
    sender.connect();
}
Also used : NioSender(org.apache.catalina.tribes.transport.nio.NioSender) MemberImpl(org.apache.catalina.tribes.membership.MemberImpl)

Example 8 with NioSender

use of org.apache.catalina.tribes.transport.nio.NioSender in project tomcat by apache.

the class NioSenderTest method run.

public void run() {
    while (true) {
        int selectedKeys = 0;
        try {
            selectedKeys = selector.select(100);
        // if ( selectedKeys == 0 ) {
        // System.out.println("No registered interests. Sleeping for a second.");
        // Thread.sleep(100);
        } catch (Exception e) {
            e.printStackTrace();
            continue;
        }
        if (selectedKeys == 0) {
            continue;
        }
        Iterator<SelectionKey> it = selector.selectedKeys().iterator();
        while (it.hasNext()) {
            SelectionKey sk = it.next();
            it.remove();
            try {
                int readyOps = sk.readyOps();
                sk.interestOps(sk.interestOps() & ~readyOps);
                NioSender sender = (NioSender) sk.attachment();
                if (sender.process(sk, (testOptions & Channel.SEND_OPTIONS_USE_ACK) == Channel.SEND_OPTIONS_USE_ACK)) {
                    System.out.println("Message completed for handler:" + sender);
                    Thread.sleep(2000);
                    sender.reset();
                    sender.setMessage(XByteBuffer.createDataPackage(getMessage(mbr)));
                }
            } catch (Throwable t) {
                t.printStackTrace();
                return;
            }
        }
    }
}
Also used : SelectionKey(java.nio.channels.SelectionKey) NioSender(org.apache.catalina.tribes.transport.nio.NioSender)

Aggregations

NioSender (org.apache.catalina.tribes.transport.nio.NioSender)8 SelectionKey (java.nio.channels.SelectionKey)6 MemberImpl (org.apache.catalina.tribes.membership.MemberImpl)6 Selector (java.nio.channels.Selector)5 BigDecimal (java.math.BigDecimal)4 DecimalFormat (java.text.DecimalFormat)4 Member (org.apache.catalina.tribes.Member)4 ChannelData (org.apache.catalina.tribes.io.ChannelData)2 XByteBuffer (org.apache.catalina.tribes.io.XByteBuffer)2