I am implementing UDP-based protocol in Twisted (CoAP) which allows two
behaviors when answering requests:
1. If response is immediately available - send acknowledgement and response
in a single datagram (piggyback response)
2. If response needs to be fetched or prepared - send datagram with
acknowledgement, and then send another datagram with a response (separate
(I think behavior #1 is called synchronous in most Twisted tutorials, and
behavior #2 is called asynchronous.)
When programmer is implementing his application on top of CoAP protocol, he
or she needs to choose how his request handler is going to behave. I would
like to handle both behaviors in the same manner - by forcing every
user-written request handler to return Deferred. Then I would
check Deferred.called parameter.
1. If True - callback will execute immediately and send proper ACK+Response
(that means request handler used defer.succeed() or somethin similar)
2. If False I send empty ACK, and wait for callback to send Response
d = requestHandler(request)
if d.called is False:
I assume that sendResponse can send either ACK+RSP, or only RSP.
I would like to ask if this is a proper approach?