Hi Bob,

> I tried searching the javadocs of RemoteEndpoint.Async and associated 
> interfaces, but could not find anything describing the threadsafe nature 
> (existing or not).  It appears that the spec lets the implementation 
> determine how to handle stuff under the covers.  This is fine, but we just 
> need to understand what that means to multi-threaded code that wants to send 
> messages.

I'd have thought that where an interface doesn't declare that it is
threadsafe, one cannot assume that it will be.  Further, if a
RemoteEndpoint represents 'the peer of a web socket conversation',
then a RemoteEndpoint, like a conversation, can surely support only a
single 'conversation state'?

IMHO, the correct choice is for each thread to have its own
RemoteEndpoint.  If the protocol being used happens to multiplex
multiple conversations to/from different endpoints over the same
TCP/UDP socket (for example), then the plumbing will do the
appropriate synchronization at that point - there would be no
advantage (and possibly some big disadvantages) for you to do your own
synchronization.  Critically, a RemoteEndpoint does not necessarily
represent a 'heavyweight' object like a Socket, and you should not be
at pains to manage your own pool of them, nor necessarily (unless it
made sense for application logic) to have a queue of messages which is
dispatched from a single thread.

However, I do think that many JSR's which ought to know better are
very lame about thread-safety guarantees for application authors, and
that more needs to be said in API documentation about patterns for
concurrent usage.  I encourage you to lobby your particular JSR of use
to include this information in future releases of the specification.
I did my bit recently at https://java.net/jira/browse/SERVLET_SPEC-81

cheers,
David Bullock

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to