Hi Qi and Maarten,

Thank you so much for sharing your experience in detail.

Cheers,
Trustin

On Dec 28, 2007 9:29 AM, Qi <[EMAIL PROTECTED]> wrote:
>
> Hi there,
>
> I used to confused on the same problem as well, so please let me share my
> understanding on this.
>
> You would only need on IoConnector if you only need one set of business
> logic for handling server's response.
>
> Let's image your IoConnector is your web browser, and IoAcceptor is a remote
> website. You can use one browser to connect to many website or open many
> pages of one website at the same time. (The more browsers you open, the more
> resource gets consumed.)
>
> Every time when you call IoConnector.connect(), an IoSession is created.
> Just like your web browser opens a page to a website, your browser and the
> remote server need to maintain a HttpSession. All further request to the
> same website(IoAcceptor) can all share this session.
>
> Depends on the class of your protocol (stateful- you store things in the
> session | stateless - nothing gets stored ), you can choose to create a
> different IoSession for each working thread, or just let all the working
> threads share a common one. IoSession is thread-safe, simultaneous calls
> would effect each other.
>
> It's recommended to have an ExectorFilter before your IoHandler if methods
> in the handler need to do I/O operations(database accessing, socket
> operation, etc time consuming tasks).
>
> Wish this would help you.
>
> Cheers,
> Qi
>
>
>
>
>
>
>
> stork wrote:
> >
> > I'm not sure I understand - how can a SocketConnector create more than one
> > connection?
> > That would explain why the connections aren't getting close properly.
> >
> > Maarten Bosteels wrote:
> >>
> >> Hello Alex,
> >>
> >> 1) you can use one SocketConnector to create many connections
> >>
> >> 2) search the forum for "Too many open files"
> >> This thread might interest you:
> >> http://www.nabble.com/Too-many-open-files-to7521146s16868.html
> >>
> >> HTH
> >> Maarten
> >>
> >> On Dec 27, 2007 4:43 PM, stork <[EMAIL PROTECTED]> wrote:
> >>>
> >>> Hi, I'm trying to write a client that can utilize a set number of
> >>> connections
> >>> using MINA trunk (mina-core-2.0.0-M1-20071221.061156-110.jar).
> >>> I'm using the netcat
> >>> (http://svn.apache.org/viewvc/mina/trunk/example/src/main/java/org/apache/mina/example/netcat/Main.java?view=markup)
> >>> as an example but I think I'm doing it wrong. I've never used NIO before
> >>> so
> >>> this is all a bit confusing to me.
> >>>
> >>> What's the preferred way of managing a lot of nio client connections
> >>> using
> >>> MINA? At the moment I'm just creating a lot of NioSocketConnector
> >>> objects,
> >>> and connecting them. I have added an IoFutureListener to the
> >>> ConnectFuture
> >>> obtained by calling nioSocketConnector.connect(InetSocketAddress):
> >>>         public void operationComplete(IoFuture arg0) {
> >>>                 if(arg0 instanceof ConnectFuture) {
> >>>                         ConnectFuture cf = (ConnectFuture)arg0;
> >>>
> >>> debug("connected="+cf.isConnected()+",exc="+cf.getException());
> >>>                         if(cf.isConnected()) {
> >>>                                 /**
> >>>                                  * Add the connected client to the
> >>> clients queue for processing
> >>>                                  */
> >>>                                 boolean offered =
> >>> clients.offer((TyrClient)cf.getSession().getAttribute("CLIENT"));
> >>>                                 if(!offered)
> >>>                                         throw new
> >>> RuntimeException("Couldn't offer connected client.");
> >>>                         } else {
> >>>                                 /**
> >>>                                  * Add a new connection attempt to the
> >>> connection queue.
> >>>                                  */
> >>>                                 boolean offered =
> >>> pending.offer(createNewConnection(TIMEOUT));
> >>>                                 if(!offered)
> >>>                                         throw new
> >>> RuntimeException("Couldn't offer connection.");
> >>>                         }
> >>>                 }
> >>>     }
> >>>
> >>> And I'm getting a lot of this:
> >>> [T:NioSocketConnector-75] connected=false,exc=java.net.ConnectException:
> >>> Connection refused
> >>> [T:NioSocketConnector-76] connected=false,exc=java.net.ConnectException:
> >>> Connection refused
> >>> [T:NioSocketConnector-77] connected=false,exc=java.net.ConnectException:
> >>> Connection refused
> >>> (Which is being expected since I'm just connecting to a closed port)
> >>> and then,
> >>> 7693 [NioSocketConnector-77] WARN
> >>> org.apache.mina.common.DefaultExceptionMonitor - Unexpected exception.
> >>> org.apache.mina.common.RuntimeIoException: Failed to initialize.
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector.<init>(AbstractPollingIoConnector.java:103)
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector.<init>(AbstractPollingIoConnector.java:61)
> >>>         at
> >>> org.apache.mina.transport.socket.nio.NioSocketConnector.<init>(NioSocketConnector.java:52)
> >>>         at tyr.Client.createNewConnection(RickRoller.java:46)
> >>>         at tyr.Client.operationComplete(RickRoller.java:154)
> >>>         at
> >>> org.apache.mina.common.DefaultIoFuture.notifyListener(DefaultIoFuture.java:302)
> >>>         at
> >>> org.apache.mina.common.DefaultIoFuture.notifyListeners(DefaultIoFuture.java:287)
> >>>         at
> >>> org.apache.mina.common.DefaultIoFuture.setValue(DefaultIoFuture.java:221)
> >>>         at
> >>> org.apache.mina.common.DefaultConnectFuture.setException(DefaultConnectFuture.java:95)
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector.processSessions(AbstractPollingIoConnector.java:262)
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector.access$500(AbstractPollingIoConnector.java:41)
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector$Worker.run(AbstractPollingIoConnector.java:298)
> >>>         at
> >>> org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
> >>>         at
> >>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> >>>         at
> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> >>>         at java.lang.Thread.run(Thread.java:619)
> >>> Caused by: java.io.IOException: Too many open files
> >>>         at sun.nio.ch.IOUtil.initPipe(Native Method)
> >>>         at
> >>> sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:49)
> >>>         at
> >>> sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:18)
> >>>         at java.nio.channels.Selector.open(Selector.java:209)
> >>>         at
> >>> org.apache.mina.transport.socket.nio.NioSocketConnector.init(NioSocketConnector.java:69)
> >>>         at
> >>> org.apache.mina.common.AbstractPollingIoConnector.<init>(AbstractPollingIoConnector.java:98)
> >>>         ... 15 more
> >>>
> >>>
> >>> So what am I doing wrong?
> >>>
> >>> Thanks,
> >>> Alex.
> >>> --
> >>> View this message in context:
> >>> http://www.nabble.com/Using-a-bunch-of-connections-in-a-client--tp14514544s16868p14514544.html
> >>> Sent from the Apache MINA Support Forum mailing list archive at
> >>> Nabble.com.
> >>>
> >>>
> >>
> >>
> >
> >
>
> --
> View this message in context: 
> http://www.nabble.com/Using-a-bunch-of-connections-in-a-client--tp14514544s16868p14520639.html
>
> Sent from the Apache MINA Support Forum mailing list archive at Nabble.com.
>
>



-- 
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP Key ID: 0x0255ECA6

Reply via email to