Rationale

Nameko only supports RPC timeouts in the standalone client. The DependencyProvider client does not support timeouts, so will wait forever for a reply.

Nameko should support both client and server timeouts. Client timeouts determine when the client stops listening for a reply. Server timeouts determine when the server will discard "too old" requests.

Server timeouts could be accomplished with a simple AMQP message header. Client timeouts in the DependencyProvider require some other timer loop.

Furthermore, there are problems with the timeout logic that is implemented in the standalone client. It uses a timeout on the socket object to track RPC timeouts, which is not the same thing. One problem with this approach is that we don't recover from socket timeouts that are shorter than the RPC timeout. Another problem occurs when the proxy is used to make multiple asynchronous RPC calls at the same time — one call may time out, but if any other successfully returns during that window, the socket timeout is reset.