How stupid I am. That should be the way messageReceived act, right? Thanks.Maarten.
On 10/22/07, Maarten Bosteels <[EMAIL PROTECTED]> wrote: > > By default, MINA preserves the order of all events for a particular > IoSession. > > When a client first sends msgA and then msgB, the corresponding > IoHandler.messageReceived events will be called in the same order on the > server. > And the second messageReceived will not be called before the first one > returned > > Note that this is only true for one particular IoSession, messageReceived > can be called simultaneously for different IoSessions. > > If you want more parallel processing, have a look at > http://issues.apache.org/jira/browse/DIRMINA-334 > > Maarten > > > On 10/22/07, mat <[EMAIL PROTECTED]> wrote: > > > > Try client sends more than 100. Make it 100000 and see. > > > > On 10/22/07, tiandike <[EMAIL PROTECTED]> wrote: > > > > > > > > > thougth my client send some requests in one connector , the server > > handle > > > these request in mutithread. > > > if the client send request b after request a ,but the server handle b > > > faster than a and in this condition can my client receive the > response > > b > > > first? > > > > > > > > > > > > mat-29 wrote: > > > > > > > > I didn't see why NOT if in your client side only single thread > sending > > > the > > > > message. > > > > > > > > On 10/22/07, tiandike <[EMAIL PROTECTED]> wrote: > > > >> > > > >> > > > >> I modified the example of echoserver > > > >> > > > >> in my code I disable the default ThreadModel setting and configure > > the > > > >> number of I/O processor thread. > > > >> > > > >> > > > >> I don't understand why my client can receive the results in order? > > > >> Thanks! > > > >> > > > >> the code and the result is below: > > > >> > > > >> ///////////////////////////////// > > > >> the main class is : > > > >> public class Main { > > > >> /** Choose your favorite port number. */ > > > >> private static final int PORT = 8080; > > > >> > > > >> public static void main(String[] args) throws Exception { > > > >> int num = Runtime.getRuntime().availableProcessors() * 3; > > > >> IoAcceptor acceptor = new SocketAcceptor(num, > > > >> Executors.newCachedThreadPool()); > > > >> IoAcceptorConfig config = new SocketAcceptorConfig(); > > > >> config.setThreadModel(ThreadModel.MANUAL); > > > >> DefaultIoFilterChainBuilder chain = config.getFilterChain(); > > > >> chain.addLast("threadPool", new > > > >> ExecutorFilter(Executors.newCachedThreadPool())); > > > >> > > > >> acceptor.bind(new InetSocketAddress(PORT), new > > > >> EchoProtocolHandler1(), > > > >> config); > > > >> System.out.println("Listening on port " + PORT); > > > >> } > > > >> > > > >> } > > > >> > > > >> > > > >> ///////////////////////////////// > > > >> EchoProtocolHandler1.java > > > >> > > > >> public class EchoProtocolHandler1 extends IoHandlerAdapter { > > > >> private static Random r=new Random(); > > > >> private static final Logger log = LoggerFactory > > > >> .getLogger(EchoProtocolHandler.class); > > > >> > > > >> > > > >> > > > >> public void exceptionCaught(IoSession session, Throwable > > cause) > > > { > > > >> cause.printStackTrace(); > > > >> session.close(); > > > >> } > > > >> > > > >> public void messageReceived(IoSession session, Object > message) > > > >> throws Exception { > > > >> if (!(message instanceof ByteBuffer)) { > > > >> return; > > > >> } > > > >> Thread.currentThread().sleep(r.nextInt(1000)); > > > >> > > > >> ByteBuffer rb = (ByteBuffer) message; > > > >> // Write the received data back to remote peer > > > >> ByteBuffer wb = ByteBuffer.allocate(rb.remaining()); > > > >> wb.put(rb); > > > >> wb.flip(); > > > >> > > > >> > > > >> session.write(wb); > > > >> } > > > >> > > > >> } > > > >> > > > >> //////////////////////////////////////////// > > > >> and my client handler: > > > >> > > > >> public class ClientHandler extends IoHandlerAdapter { > > > >> > > > >> private int num=0; > > > >> > > > >> public ClientHandler(int num){ > > > >> this.num=num; > > > >> } > > > >> > > > >> > > > >> @Override > > > >> public void sessionOpened(IoSession session) throws > Exception > > { > > > >> > > > >> for (int i = 0; i < num; i++) { > > > >> session.write(String.valueOf(i)); > > > >> > > > >> } > > > >> } > > > >> @Override > > > >> public void messageReceived(IoSession session, Object > message) > > > >> throws Exception { > > > >> > > > >> System.out.println("messageReceived:"+message); > > > >> } > > > >> > > > >> > > > >> } > > > >> > > > >> > > > >> ////////////////////////////////////////////// > > > >> and ClientMain : > > > >> > > > >> public class ClientMain { > > > >> > > > >> private static final String HOSTNAME = "localhost"; > > > >> private static final int PORT = 8080; > > > >> > > > >> /** > > > >> * @param args > > > >> */ > > > >> public static void main(String[] args) { > > > >> InetSocketAddress socketAddress = new > > > >> InetSocketAddress(HOSTNAME, PORT); > > > >> IoServiceConfig config = new > SocketConnectorConfig(); > > > >> config.setThreadModel(ThreadModel.MANUAL); > > > >> DefaultIoFilterChainBuilder chain = > > > config.getFilterChain > > > >> (); > > > >> > > > >> chain.addLast("threadPool", new > > > >> ExecutorFilter(Executors.newCachedThreadPool())); > > > >> > > > >> int num=100; > > > >> > > > >> SocketConnector connector=new SocketConnector(); > > > >> > > > >> ConnectFuture future = connector.connect(new > > InetSocketAddress( > > > >> HOSTNAME, PORT), new ClientHandler(num), config); > > > >> > > > >> future.join(); > > > >> > > > >> > > > >> } > > > >> > > > >> } > > > >> /////////////////////////////////////////////////////////////// > > > >> in eclipse console: > > > >> > > > >> messageReceived:0 > > > >> messageReceived:1 > > > >> messageReceived:2 > > > >> messageReceived:3 > > > >> messageReceived:4 > > > >> messageReceived:5 > > > >> messageReceived:6 > > > >> messageReceived:7 > > > >> messageReceived:8 > > > >> messageReceived:9 > > > >> messageReceived:10 > > > >> messageReceived:11 > > > >> messageReceived:12 > > > >> messageReceived:13 > > > >> messageReceived:14 > > > >> messageReceived:15 > > > >> messageReceived:16 > > > >> messageReceived:17 > > > >> messageReceived:18 > > > >> messageReceived:19 > > > >> messageReceived:20 > > > >> messageReceived:21 > > > >> messageReceived:22 > > > >> messageReceived:23 > > > >> messageReceived:24 > > > >> ........ > > > >> messageReceived:99 > > > >> > > > >> -- > > > >> View this message in context: > > > >> > > > > > > http://www.nabble.com/why-client-received-message-in-order--tf4668688s16868.html#a13336726 > > > >> Sent from the Apache MINA Support Forum mailing list archive at > > > >> Nabble.com > > > >> . > > > >> > > > >> > > > > > > > > > > > > > > -- > > > View this message in context: > > > > > > http://www.nabble.com/why-client-received-message-in-order--tf4668688s16868.html#a13338571 > > > Sent from the Apache MINA Support Forum mailing list archive at > > Nabble.com > > > . > > > > > > > > >
