On 1/16/07, Steven E. Harris <[EMAIL PROTECTED]> wrote:

Trustin Lee <[EMAIL PROTECTED]> writes:

> So incoming messageSent() events caused by session.write(new
> Quote()) are not being processed until messageReceived(IoSession,
> CmdReplicate) ends.  Writing from a separate thread is a good idea
> here, too.

This sounds related to my question from last week that has yet to
provoke any response:

  IoSession-level synchronization of ProtocolEncoder/ProtocolDecoder pair
  http://article.gmane.org/gmane.comp.apache.directory.mina.devel/2779

http://www.nabble.com/IoSession-level-synchronization-of-ProtocolEncoder-ProtocolDecoder-pair-tf2947470.html


Oops... Sorry for being late in responding!

Since writing that message, I've confirmed that all ByteBuffer write
requests to SocketSessionImpls (socket-based IoSessions) get pushed
into a queue, and are drawn out by a single worker thread to be
written to the actual socket.

Looking at ExecutorFilter.fireEvent(), if I'm not mistaken, no more
than one thread will ever service a given IoSession's event
queue. However, it's possible that one thread is writing outbound
messages (passing down through the filter chain) while
SocketIoProcessor's worker thread is reading and dispatching incoming
messages (passing up through the filter chain), possibly splitting off
to per-session worker threads via an ExecutorFilter.


True.

If this description is accurate, can one then conclude that an
IoFilter's messageSent() and filterWrite() methods might be called
concurrently for a given IoSession?


Yes, exactly.

Trustin
--
what we call human nature is actually human habit
--
http://gleamynode.net/
--
PGP key fingerprints:
* E167 E6AF E73A CBCE EE41  4A29 544D DE48 FE95 4E7E
* B693 628E 6047 4F8F CFA4  455E 1C62 A7DC 0255 ECA6

Reply via email to