- From: Marc Hadley <Marc.Hadley@Sun.COM>
- Date: Tue, 31 Jan 2006 11:41:28 -0500
- To: noah_mendelsohn@us.ibm.com
- Cc: Jean-Jacques Moreau <jean-jacques.moreau@crf.canon.fr>, Mark Baker <distobj@acm.org>, David Orchard <dorchard@bea.com>, "Patrick R. McManus" <mcmanus@datapower.com>, Rich Salz <rsalz@datapower.com>, xml-dist-app@w3.org
- Message-id: <3DB6CD7A-A349-44DD-AF10-BE3009D7F528@Sun.COM>
On Jan 30, 2006, at 2:46 PM, noah_mendelsohn@us.ibm.com wrote: > > There's a point of view that implementing one-way FAF over HTTP isn't > worth the trouble, because you will have so much packet traffic at > a lower > level, and either your application will have to wait for the (empty) > response or more likely you will have to spin of some sort of > thread or > other asynchronous construct to gather in the response and close the > socket in parallel with the application proceeding. The above assumes a very low level API, I think developers will normally use higher level abstractions that hide much of the detail and make ignoring the response as easy as dropping a return value or writing an empty call back method, e.g. in JAX-WS: // using polling Dispatch<SOAPMessage> stub = ... SOAPMessage request = ... stub.invokeAsync(request); // ignore the returned polling object or // using a callback Dispatch<SOAPMessage> stub = ... SOAPMessage request = ... stub.invokeAsync(request, new AyncHandler<SOAPMessage> () { public void handleResponse(Response<SOAPMessage> res) {} }); I'm not denying that this is inefficient in network terms but from a programmer perspective its very simple. Marc. > In other words, > either (in pseudo code at the client): > > fireAndForget(oneWayMessage) { > s = openSocket(); > s.send(oneWayMessage); > // too bad we're about to hang on the > // next line, because we really wanted > // to fire and forget > s.receive(throwAwayResponse); > s.close(); > ) > > -or- > > fireAndForget(oneWayMessage) { > s = openSocket(); > s.send(oneWayMessage); > // too bad we're about to go > // to the overhead and debugging complexity > // of spinning off a thread > // just to wait for the > // response. > fork { > s.receive(throwAwayResponse); > s.close(); > // 2nd thread terminates here. > } > // at least this branch will return > // immediately to the application > return; > ) > > ...and yes, the above is pseudo code, not exactly legal in any > particular > system I know of. Note that in either case, quite a few TCP-level > packets > are flying back and forth to set up and tear down these > connections. If > UDP meets your needs (e.g. datagram delivery semantics) it's a far > more > appropriate transport for FAF. > > Having said all that, the short answer to your question is "yes". > If you > choose to implement FAF on HTTP, and it may yet be useful to some > users, I > think the implications are as you summarize them. > > -------------------------------------- > Noah Mendelsohn > IBM Corporation > One Rogers Street > Cambridge, MA 02142 > 1-617-693-4036 > -------------------------------------- > > > > > --- Marc Hadley <marc.hadley at sun.com> Business Alliances, CTO Office, Sun Microsystems.
Attachments
- application/pkcs7-signature attachment: smime.p7s
Received on Tuesday, 31 January 2006 16:41:43 UTC