Understanding Send Latency
The overall latency of the Send(IMessage) method includes all latencies of all operations inside this method. The following sequence of operations are performed when the Send(IMessage) method is called:
- Invocation of the OutboundSessionMessage or OutboundApplicationMessage event handler.
- Writing necessary data (message content, timestamp, sequence numbers, etc.) to the session storage. For the File-Based Session Storage, it is a costly operation, and it can take tens of microseconds. For the Asynchronous File-based Session Storage, it is far cheaper because the actual writing is performed in a separate thread. And lastly, for the Memory-Based Session Storage it is a low-cost operation because data is stored in the memory, not in the file system. Please note that if the LogBeforeSending option is false, then the logging is performed after sending.
- Invocation of the system
send
function. In practice, the latency of the systemsend
function can be about 5-10 microseconds what depends on the size of send data, network workload, network software/hardware, etc. For example, you can significantly decrease this latency by using Solarflare network cards and the user-space "Onload" TCP stack implementation. - If the system
send
function fails, then the unsent message is stored in the sending queue for the subsequent sending by the sending thread.