Do I want an ACK in my high-level protocol when using TCP?



I have two applications that must reliably communicate with eachother.
Application A must send requests to application B, and application B
can process the requests in any order, and return the results (request
IDs are used to associate responses with requests). Processing a
command can take anywhere from a few seconds to 10 minutes.

I create two TCP connections between the applications; a request
connection and a response connection. Application A sends requests
over the request connection, and is simultaneously reading responses
from B on the response connection.

My question is, is there any reason why I need application B to send
an acknowledgment to application A when it receives a request? E.g. do
I want to do this:

A -> sends command on request connection
B -> sends ack on *request* connection
... some time later ...
B -> sends response on response connection

Or can I just do this and assume that, because I was using TCP, B
successfully received the request:

A -> sends command on request connection
... some time later ...
B -> sends response on response connection

Currently, commands do not fail, there is no error response. But even
if there were, I think I can have B send the error back as part of the
response on the response connection.

The reason I'd prefer to not have B send an acknowledgment back is
performance - it will be a bottleneck and won't meet the performance
requirements. If I did use the ack, the reason I'd do it on the
request connection instead of the response connection is ease of
implementation -- on both A and B's end.

I'm not really sure what the usual way of doing this is (or if there's
a different approach to using two connections, but using separate
connections for requests and response greatly simplifies the
implementation as well).

Thanks,
Jason
.



Relevant Pages

  • Re: Problems with access to a web page
    ... Server: Apache ... Connection: close ... Look what I get now when I send the exact same request ... and got exactly the same 0 length response ...
    (microsoft.public.windows.inetexplorer.ie6.browser)
  • RE: problem WebRequest and WebResponse
    ... HttpWebRequest request = ... WebResponse response = null; ... System.Net.Sockets.SocketException: A connection attempt failed ... connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& ...
    (microsoft.public.dotnet.languages.csharp)
  • RE: EvtWmiInstanceExecuteMethod OutBufferSize problem
    ... Dim InstanceCount ... Description("Network Function for this IPMI request.") ... Description("IPMI request command"): amended ... "Command response could not be provided", ...
    (microsoft.public.development.device.drivers)
  • EvtWmiInstanceExecuteMethod OutBufferSize problem
    ... Dim InstanceCount ... Description("Network Function for this IPMI request.") ... Description("IPMI request command"): amended ... "Command response could not be provided", ...
    (microsoft.public.development.device.drivers)
  • Re: Alternatives to Application.DoEvents?
    ... Thanks Charles. ... > Send command to remote serial device on main thread. ... The main thread is blocked until a response is received or there ... Each application request may ...
    (microsoft.public.dotnet.languages.vb)