You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by el...@apache.org on 2012/09/27 18:37:50 UTC
svn commit: r1391091 - in
/mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf:
./ UdpClient.java UdpServer.java
Author: elecharny
Date: Thu Sep 27 16:37:50 2012
New Revision: 1391091
URL: http://svn.apache.org/viewvc?rev=1391091&view=rev
Log:
Added a performance test for UDP
Added:
mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/
mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpClient.java
mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpServer.java
Added: mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpClient.java
URL: http://svn.apache.org/viewvc/mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpClient.java?rev=1391091&view=auto
==============================================================================
--- mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpClient.java (added)
+++ mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpClient.java Thu Sep 27 16:37:50 2012
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.example.udp.perf;
+
+import java.net.InetSocketAddress;
+
+import org.apache.mina.core.buffer.IoBuffer;
+import org.apache.mina.core.future.ConnectFuture;
+import org.apache.mina.core.service.IoConnector;
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.transport.socket.DatagramSessionConfig;
+import org.apache.mina.transport.socket.nio.NioDatagramConnector;
+
+/**
+ * An UDP client taht just send thousands of small messages to a UdpServer.
+ *
+ * This class is used for performance test purposes. It does nothing at all, but send a message
+ * repetitly to a server.
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class UdpClient extends IoHandlerAdapter {
+ /** The connector */
+ private IoConnector connector;
+
+ /** The session */
+ private static IoSession session;
+
+ /**
+ * Create the UdpClient's instance
+ */
+ public UdpClient() {
+ connector = new NioDatagramConnector();
+
+ connector.setHandler(this);
+ DatagramSessionConfig dcfg = (DatagramSessionConfig) connector.getSessionConfig();
+
+ ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", UdpServer.PORT));
+
+ connFuture.awaitUninterruptibly();
+
+ session = connFuture.getSession();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void messageReceived(IoSession session, Object message) throws Exception {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void messageSent(IoSession session, Object message) throws Exception {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionClosed(IoSession session) throws Exception {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionCreated(IoSession session) throws Exception {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionOpened(IoSession session) throws Exception {
+ }
+
+ /**
+ * The main method : instanciates a client, and send N messages. We sleep
+ * between each K messages sent, to avoid the server saturation.
+ * @param args
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ UdpClient client = new UdpClient();
+
+ long t0 = System.currentTimeMillis();
+
+ for (int i = 0; i <= UdpServer.MAX_RECEIVED; i++) {
+ if (i % 10 == 0) {
+ Thread.sleep(1);
+ }
+
+ String str = Integer.toString(i);
+ byte[] data = str.getBytes();
+ IoBuffer buffer = IoBuffer.allocate(data.length);
+ buffer.put(data);
+ buffer.flip();
+ session.write(buffer);
+
+ if (i % 10000 == 0) {
+ System.out.println("Sent " + i + " messages");
+ }
+ }
+
+ long t1 = System.currentTimeMillis();
+
+ System.out.println("Sent messages delay : " + (t1 - t0));
+
+ Thread.sleep(100000);
+
+ client.connector.dispose(true);
+ }
+}
Added: mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpServer.java
URL: http://svn.apache.org/viewvc/mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpServer.java?rev=1391091&view=auto
==============================================================================
--- mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpServer.java (added)
+++ mina/branches/2.0/mina-example/src/main/java/org/apache/mina/example/udp/perf/UdpServer.java Thu Sep 27 16:37:50 2012
@@ -0,0 +1,147 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.example.udp.perf;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.mina.core.service.IoHandlerAdapter;
+import org.apache.mina.core.session.IdleStatus;
+import org.apache.mina.core.session.IoSession;
+import org.apache.mina.transport.socket.DatagramSessionConfig;
+import org.apache.mina.transport.socket.nio.NioDatagramAcceptor;
+
+/**
+ * An UDP server used for performance tests.
+ *
+ * It does nothing fancy, except receiving the messages, and counting the number of
+ * received messages.
+ *
+ * @author <a href="http://mina.apache.org">Apache MINA Project</a>
+ */
+public class UdpServer extends IoHandlerAdapter {
+ /** The listening port (check that it's not already in use) */
+ public static final int PORT = 18567;
+
+ /** The number of message to receive */
+ public static final int MAX_RECEIVED = 100000;
+
+ /** The starting point, set when we receive the first message */
+ private static long t0;
+
+ /** A counter incremented for every recieved message */
+ private AtomicInteger nbReceived = new AtomicInteger(0);
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
+ cause.printStackTrace();
+ session.close(true);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void messageReceived(IoSession session, Object message) throws Exception {
+
+ int nb = nbReceived.incrementAndGet();
+
+ if (nb == 1) {
+ t0 = System.currentTimeMillis();
+ }
+
+ if (nb == MAX_RECEIVED) {
+ long t1 = System.currentTimeMillis();
+ System.out.println("-------------> end " + (t1 - t0));
+ }
+
+ if (nb % 10000 == 0) {
+ System.out.println("Received " + nb + " messages");
+ }
+
+ // If we want to test the write operation, uncomment this line
+ //session.write(message);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionClosed(IoSession session) throws Exception {
+ System.out.println("Session closed...");
+
+ // Reinitialize the counter and expose the number of received messages
+ System.out.println("Nb message received : " + nbReceived.get());
+ nbReceived.set(0);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionCreated(IoSession session) throws Exception {
+ System.out.println("Session created...");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
+ System.out.println("Session idle...");
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void sessionOpened(IoSession session) throws Exception {
+ System.out.println("Session Opened...");
+ }
+
+ /**
+ * Create the UDP server
+ */
+ public UdpServer() throws IOException {
+ NioDatagramAcceptor acceptor = new NioDatagramAcceptor();
+ acceptor.setHandler(this);
+
+ // The logger, if needed. Commented atm
+ //DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
+ //chain.addLast("logger", new LoggingFilter());
+
+ DatagramSessionConfig dcfg = acceptor.getSessionConfig();
+
+ acceptor.bind(new InetSocketAddress(PORT));
+
+ System.out.println("Server started...");
+ }
+
+ /**
+ * The entry point.
+ */
+ public static void main(String[] args) throws IOException {
+ new UdpServer();
+ }
+}