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  
56          ConnectFuture connFuture = connector.connect(new InetSocketAddress("localhost", UdpServer.PORT));
57  
58          connFuture.awaitUninterruptibly();
59  
60          session = connFuture.getSession();
61      }
62  
63      /**
64       * {@inheritDoc}
65       */
66      @Override
67      public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
68          cause.printStackTrace();
69      }
70  
71      /**
72       * {@inheritDoc}
73       */
74      @Override
75      public void messageReceived(IoSession session, Object message) throws Exception {
76      }
77  
78      /**
79       * {@inheritDoc}
80       */
81      @Override
82      public void messageSent(IoSession session, Object message) throws Exception {
83      }
84  
85      /**
86       * {@inheritDoc}
87       */
88      @Override
89      public void sessionClosed(IoSession session) throws Exception {
90      }
91  
92      /**
93       * {@inheritDoc}
94       */
95      @Override
96      public void sessionCreated(IoSession session) throws Exception {
97      }
98  
99      /**
100      * {@inheritDoc}
101      */
102     @Override
103     public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
104     }
105 
106     /**
107      * {@inheritDoc}
108      */
109     @Override
110     public void sessionOpened(IoSession session) throws Exception {
111     }
112 
113     /**
114      * The main method : instanciates a client, and send N messages. We sleep 
115      * between each K messages sent, to avoid the server saturation.
116      * @param args
117      * @throws Exception
118      */
119     public static void main(String[] args) throws Exception {
120         UdpClient client = new UdpClient();
121 
122         long t0 = System.currentTimeMillis();
123 
124         for (int i = 0; i <= UdpServer.MAX_RECEIVED; i++) {
125             Thread.sleep(1);
126 
127             String str = Integer.toString(i);
128             byte[] data = str.getBytes();
129             IoBuffer buffer = IoBuffer.allocate(data.length);
130             buffer.put(data);
131             buffer.flip();
132             session.write(buffer);
133 
134             if (i % 10000 == 0) {
135                 System.out.println("Sent " + i + " messages");
136             }
137         }
138 
139         long t1 = System.currentTimeMillis();
140 
141         System.out.println("Sent messages delay : " + (t1 - t0));
142 
143         Thread.sleep(100000);
144 
145         client.connector.dispose(true);
146     }
147 }