View Javadoc

1   /*
2    *  Licensed to the Apache Software Foundation (ASF) under one
3    *  or more contributor license agreements.  See the NOTICE file
4    *  distributed with this work for additional information
5    *  regarding copyright ownership.  The ASF licenses this file
6    *  to you under the Apache License, Version 2.0 (the
7    *  "License"); you may not use this file except in compliance
8    *  with the License.  You may obtain a copy of the License at
9    *
10   *    http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *  Unless required by applicable law or agreed to in writing,
13   *  software distributed under the License is distributed on an
14   *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *  KIND, either express or implied.  See the License for the
16   *  specific language governing permissions and limitations
17   *  under the License.
18   *
19   */
20  package org.apache.mina.example.udp.perf;
21  
22  import java.net.InetSocketAddress;
23  
24  import org.apache.mina.core.buffer.IoBuffer;
25  import org.apache.mina.core.future.ConnectFuture;
26  import org.apache.mina.core.service.IoConnector;
27  import org.apache.mina.core.service.IoHandlerAdapter;
28  import org.apache.mina.core.session.IdleStatus;
29  import org.apache.mina.core.session.IoSession;
30  import org.apache.mina.transport.socket.DatagramSessionConfig;
31  import org.apache.mina.transport.socket.nio.NioDatagramConnector;
32  
33  /**
34   * An UDP client taht just send thousands of small messages to a UdpServer. 
35   * 
36   * This class is used for performance test purposes. It does nothing at all, but send a message
37   * repetitly to a server.
38   * 
39   * @author <a href="http://mina.apache.org">Apache MINA Project</a>
40   */
41  public class UdpClient extends IoHandlerAdapter {
42      /** The connector */
43      private IoConnector connector;
44  
45      /** The session */
46      private static IoSession session;
47  
48      /**
49       * Create the UdpClient's instance
50       */
51      public UdpClient() {
52          connector = new NioDatagramConnector();
53  
54          connector.setHandler(this);
55          DatagramSessionConfig dcfg = (DatagramSessionConfig) connector.getSessionConfig();
56  
57          ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", UdpServer.PORT));
58  
59          connFuture.awaitUninterruptibly();
60  
61          session = connFuture.getSession();
62      }
63  
64      /**
65       * {@inheritDoc}
66       */
67      @Override
68      public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
69          cause.printStackTrace();
70      }
71  
72      /**
73       * {@inheritDoc}
74       */
75      @Override
76      public void messageReceived(IoSession session, Object message) throws Exception {
77      }
78  
79      /**
80       * {@inheritDoc}
81       */
82      @Override
83      public void messageSent(IoSession session, Object message) throws Exception {
84      }
85  
86      /**
87       * {@inheritDoc}
88       */
89      @Override
90      public void sessionClosed(IoSession session) throws Exception {
91      }
92  
93      /**
94       * {@inheritDoc}
95       */
96      @Override
97      public void sessionCreated(IoSession session) throws Exception {
98      }
99  
100     /**
101      * {@inheritDoc}
102      */
103     @Override
104     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
105     }
106 
107     /**
108      * {@inheritDoc}
109      */
110     @Override
111     public void sessionOpened(IoSession session) throws Exception {
112     }
113 
114     /**
115      * The main method : instanciates a client, and send N messages. We sleep 
116      * between each K messages sent, to avoid the server saturation.
117      * @param args
118      * @throws Exception
119      */
120     public static void main(String[] args) throws Exception {
121         UdpClient client = new UdpClient();
122 
123         long t0 = System.currentTimeMillis();
124 
125         for (int i = 0; i <= UdpServer.MAX_RECEIVED; i++) {
126             //if (i % 2 == 0) {
127             Thread.sleep(1);
128             //}
129 
130             String str = Integer.toString(i);
131             byte[] data = str.getBytes();
132             IoBuffer buffer = IoBuffer.allocate(data.length);
133             buffer.put(data);
134             buffer.flip();
135             session.write(buffer);
136 
137             if (i % 10000 == 0) {
138                 System.out.println("Sent " + i + " messages");
139             }
140         }
141 
142         long t1 = System.currentTimeMillis();
143 
144         System.out.println("Sent messages delay : " + (t1 - t0));
145 
146         Thread.sleep(100000);
147 
148         client.connector.dispose(true);
149     }
150 }